Jump to content

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Photo
- - - - -

Subklasowanie UIButton - gdzie wstawić swoje zmiany?


  • Please log in to reply
10 replies to this topic

#1 Roberto

Roberto
  • 13752 posts
  • SkądWrocław

Posted 25 August 2010 - 09:29

A raczej jak to dobrze zrobić. Robię sobie subklasę UIButton, dodaje tam subwidoki, rysuję sobie tło, etc. Z tłem sprawa prosta - jest DrawRect. A co z subwidokami? Gdzie je dodawać? inicjalizatorem jest buttonWithType: więc w sumie na logikę wychodziłoby, że tam? ale z drugiej strony - jak sobie utworzę ten button w Interface Builderze to ta metoda nie jest w ogóle wywoływana. Jest za to awakeFromNib wtedy. Tylko trochę mi nie pasuje, żebym miał robić 2 takie same rzeczy w 2 metodach - tak ma być czy coś ominąłem?

#2 Roberto

Roberto
  • 13752 posts
  • SkądWrocław

Posted 25 August 2010 - 17:44

na serio nikt nie bawił się w kustomizację UIButtona?

#3 damik4

damik4
  • 88 posts

Posted 25 August 2010 - 20:46

Z tego, co wiem - Interface Builder inicjuje przez initWithCoder: Co do subwidoków, to zrób sobie button z typem Custom - wtedy mozesz dowolne podwidoki dodawac i ustawiać ich tła itd. Nie koniecznie bawiłbym się w drawRect bo to tylko komplikuje sprawe.

#4 macieks72

macieks72

  • 9873 posts

Posted 25 August 2010 - 20:47

Roberto - podejrzewam że tutaj większość "programistów" nie patrzy na to żeby kod był dobrze napisane, a tylko żeby działało ;) Stąd brak odpowiedzi.

#5 wezuwiusz

wezuwiusz
  • 783 posts
  • SkądDublin, Katowice

Posted 25 August 2010 - 20:54

do rysowania masz funkcje 'drawRect : ( CGRect)rect' i tam (zgodnie z dokumentacja i przykladami) powinno umieszczac sie wszelkie funkcje rysujace viewa. W ktorejs z sesji wwdc 2010 pokazywali nawet w jakims przykladzie, co prawda dotyczyl czegos innego, ale warto popatrzec :)

#6 Roberto

Roberto
  • 13752 posts
  • SkądWrocław

Posted 25 August 2010 - 22:11

damik4 - hm, faktycznie tak IB robi (czytałem w końcu o tym ;] i mały test to potwierdził) - czyli tam też wepchnę co trzeba i powinno być ok wtedy - ma to sens. dzięki co do dodatkowych widoków dla custombutton'a - albo ja coś źle robię, albo w IB nie da się tego zrobić przez drag&drop (nie dodają mi się po prostu) jak to ma miejsce zazwyczaj, dlatego robię to w kodzie. Tylko nie wiem gdzie w kodzie jest odpowiednie miejsce na to. draw rect dla tła i tak już opanowałem (niby można tam też resztę subwidoków zrobić, ale w moim wypadku to by była sztuka dla sztuki - gdybym miał więcej tych buttonów, to może, w celach wydajnościowych, ale tak...) bo obrazka pakować w tło nie chcę (to akurat chciałbym uniezależnić od rozdzielczości, bo potem jakaś drobna zmiana będzie mi komplikować sprawę). macieks72 - chyba trochę racji. Albo też ci bardziej dbający nie chcą zdradzać swojego warsztatu ;) wezuwiusz - to wiem. jednak nie za bardzo pasowałoby mi tam wkładanie dodawania subwidoków, bo to by trochę dziwne było (przy naciśnięciu przerysowuję button - tworzenie go w tym momencie praktycznie zupełnie na nowo to IMO kiepski pomysł). a może się mylę? funkcje rysujące co prawda komórki tabeli przy pomocy draw rect już mam trochę oblatane bo tym też się bawiłem, czytałem całkiem sporo, szukałem przykładów (między innymi 'super fast scrolling' autora tweetie ;]). miałem też drobny problem z isHighlighted, żeby to przy wciśnięciu jakoś wyglądało. aktualnie użyłem do tego beginTrackingWithTouch i endTrackingWithTouch - zmieniam co trzeba, ustawiam odpowiednio higlighted (bo przy zbyt krótkich kliknięciach mi się rąbało rysowanie) i daję setNeedsDisplay, jednak jest problem kiedy to palec jest za daleko i isHighlighted już nie jest prawdziwe, jednak mój button nadal rysował się wciśnięty. Aktualnie rozwiązałem to poprzez dodanie do obserwatorów higlighted samego buttona i jak się zmieni wartość to przerysowanie, jednak też nie wiem czy to nie jest trochę naokoło. działać działa, wydaje się rozwiązaniem dobrym (na pewno lepszym niż robienie tego w continueTrackingWithTouch), ale nie wiem czy najlepszym.

#7 wojtkow

wojtkow


  • 6767 posts
  • Płeć:
  • SkądPoznań

Posted 26 August 2010 - 04:54

Wiecie, ja np. wyleczyłem się z kastomizacji (jakie piękne słowo) standardowych kontrolek. Mało, że trzeba uważać, bo można zaliczyć cofkę programu, to jeszcze klienci marudzą, jak wszystko nie wygląda identycznie jak w standardzie (mówię oczywiście o aplikacjach użytkowych, nie grach). Obecnie ograniczam się głównie do manipulowania kolorami, etc.

#8 Roberto

Roberto
  • 13752 posts
  • SkądWrocław

Posted 26 August 2010 - 08:55

Tylko co jak co, ale buttony są paskudne ;) I do moich celów się zupełnie nie nadają - bo muszę dodać tam jeszcze jedną informację. I chyba całkiem sporo aplikacji je zmienia pod siebie (nie tylko gier) Co prawda zazwyczaj jest to tylko tło, ale zawsze :) A komórki tabel to są subklasowane na potęgę ;)

#9 thret

thret
  • 44 posts

Posted 26 August 2010 - 21:47

Ja kiedyś chciałem oddtworzyć przyciski ze springboarda, bo potrzebowałem do projektu i doszedłem do tego: - tworzymy klase dziedziczącą po UIButton i tam tworzymy metode - (void)layoutSubviews w niej można coś poustawiać, żeby się nie reswetowało za każdym razem, a reszte można w ViewDidLoad controlera widoku.... dla moich potrzeb to wystarczylo...

#10 Roberto

Roberto
  • 13752 posts
  • SkądWrocław

Posted 27 August 2010 - 08:20

Tylko w kontrolerze nie chce ustawiać prawie nic ;) oprócz oczywistosci jak tekst buttona czy treść subwidokow. Same subwidoki czy inne pierdoły maja być w klasie buttona Ale dzięki - popatrzę na tamta funkcje

#11 macieks72

macieks72

  • 9873 posts

Posted 27 August 2010 - 11:53

No i tak jak mi się wydawało, większość nie wie dokładnie o co Roberto chodzi. On chce mieć ładny kod, napisany tak jak powinno się pisać, a nie żeby było i napierdzielić linijek gdzie tylko się da. Chętnie bym Ci pomógł, ale niestety nie w tym SDK ;)




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users