Skocz do zawartości

Witaj!

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

Zdjęcie
- - - - -

Subklasowanie UIButton - gdzie wstawić swoje zmiany?


  • Zaloguj się, aby dodać odpowiedź
10 odpowiedzi w tym temacie

#1 Roberto

Roberto
  • 13 752 postów
  • SkądWrocław

Napisano 25 sierpnia 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
  • 13 752 postów
  • SkądWrocław

Napisano 25 sierpnia 2010 - 17:44

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

#3 damik4

damik4
  • 88 postów

Napisano 25 sierpnia 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

  • 9 873 postów

Napisano 25 sierpnia 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 postów
  • SkądDublin, Katowice

Napisano 25 sierpnia 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
  • 13 752 postów
  • SkądWrocław

Napisano 25 sierpnia 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


  • 6 767 postów
  • Płeć:
  • SkądPoznań

Napisano 26 sierpnia 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
  • 13 752 postów
  • SkądWrocław

Napisano 26 sierpnia 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 postów

Napisano 26 sierpnia 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
  • 13 752 postów
  • SkądWrocław

Napisano 27 sierpnia 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

  • 9 873 postów

Napisano 27 sierpnia 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 ;)




Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych