2009-08-21 22 views
13

Chciałbym utworzyć przycisk przełączania w mojej aplikacji na iPhone'a. Jednak nie wiem dokładnie, jakie byłoby najlepsze podejście do tego.Implementacja przycisku przełącznika iPhone'a

Rozważam dwie opcje.

Mogę podklasować UIButton. W ten sposób nie muszę wdrażać obsługi dotykowej. Mogłem po prostu stworzyć metodę, która zwraca wartość logiczną wskazującą, czy przycisk jest włączony czy wyłączony.

Mogę również zacząć od podklasy UIView i utworzyć ją od podstaw. Przypuszczam, że łatwiej byłoby robić takie rzeczy jak animacja przejścia, ale musiałem stworzyć własną obsługę dotykową.

Co według Ciebie jest najlepsze? A może znasz lepszy sposób? (Może w sieci dostępny jest widok open-source/free?)

EDIT: Nie chcę używać UISwitch, ponieważ chcę, aby mój przycisk przełącznika wyglądał w ten sposób. Chcę, aby był to duży prostokątny przycisk i sprawił, że tło zmieni się, wskazując stan.

Dzięki!

Odpowiedz

4

Można użyć UIButton i ustawić jej enabled nieruchomości.

W programie Interface Builder można ustawić oddzielne obrazy dla stanów włączonych i wyłączonych, a zmienna właściwości IBAction.

+0

To sprytnie. Dziękuję Ci! –

+12

Zastanawiam się, dlaczego wybrałeś właściwość 'enabled' zamiast' selected'? Po przeczytaniu tej wskazówki jakiś czas temu zaimplementowałem ją dzisiaj używając 'selected'. Działa świetnie. Potem ponownie przeczytałem napiwek i spróbowałem 'enabled'. Po wyłączeniu nie można już kliknąć przycisku, więc nie jest to świetny przełącznik. Czy jest jakieś ustawienie, które przegapiłem? – slothbear

+0

Masz rację, zasugerowałem to w komentarzu do innej odpowiedzi. –

0

Czy nie ma już przycisku przełączającego, czy też czegoś tu brakuje?

EDYCJA: Jak powiedzieli inni, nazywa się to UISwitch, i włącza się i wyłącza.

+0

'UISwitch' jest sposobem wdrożenia przełączanie –

+0

Dzięki. Nie pamiętam dokładnie nazwy i nie mam zainstalowanego pakietu iPhone SDK w tym systemie. – Cinder6

0

Może ja nie rozumiem pytanie poprawnie ..why jesteś nie używając UISwitch

0

Ja też spojrzał na UISwitch, ale w moim przypadku nie chcę przycisk włączania/wyłączania, naprawdę chcę przycisk przełączania. Co próbuję zrobić, znowu w moim przypadku, ma blok przycisków, które wyglądają jak UISegmentedControl, ale gdzie użytkownik może "przełączać" więcej niż jeden z przycisków kontrolki naraz. Problem, który próbuję rozwiązać, polega na tym, że mam BARDZO ograniczony ekran realestate i wiele przełączników, aby dostać się na ekran.

Moim spadkiem jest prawdopodobnie UITableView pełen komór przełączania. W ten sposób mogę dodać tyle przełączników, ile chcę, w ustalonym przewijanym obszarze ekranu.

Niestety, UISwitch nie zawsze pasuje do specyfikacji interfejsu użytkownika, które ludzie mają na myśli, więc domyślam się, że dżentelmen, który opublikował oryginalny post, nie szukał przełącznika On/Off, ale chciał mieć przycisk, który zmienił jego stan jakoś.

0

Też muszę to zrobić. Czy włączenie stanu NIE na zapobiegnie powrotowi przycisku?

UPDATE

Ludzie sugerują UISwitch ale może to być skórki wszystkich odpowiednich stanów się, na, wyłączony, selectedUp, SelectedOver, selectedDisabled?

+0

Tak, więc to, co zrobiłem, to użycie "wybranej" właściwości, która - o ile mi wiadomo - tak naprawdę nie robi niczego dla UIButtonów. –

+0

Czy UIButton obsługuje wszystkie stany przełącznika dla skórek. Wybacz mojej ignorancji, ponieważ patrzę na to jako programista Flex. W Flexu ToggleButton ma zwykle stan "up", "over", "disabled", ale potem również selectedUp, selectedOver, selectedDisabled itd. Potrzebne byłyby wszystkie stany, aby utworzyć właściwy przełącznik. I tak, potrzebujesz również wybranej nieruchomości. Jeśli istnieje na Uibuttonie, sugeruje, że możesz włączyć przełączanie. Czy tak jest? –

+0

Nie, nie wierzę w to. Ale możesz zastąpić metodę setSelected: i zmienić styl. –

2

Po prostu wykonaj metodę (IBAction), a także BOOL. Ustaw wartość domyślną BOOL na FALSE. Twój IBAction musi wyglądać następująco:

- (IBAction) .... { 

    if (bool) { 
     // do your things 
    } 

    else { 
     // do your things 
    } 

    bool =! bool 
} 

który pracuje dla mnie!

+1

To by-praca-, ale nie jest bardzo -pretty-. –

13
-(IBAction)toggle{ 
    if (button.selected == NO) { 
     button.selected = YES; 

    } 
    else { 
     button.selected = NO; 
    } 
} 

lub

-(IBAction)toggle:(UIButton*)sender 
{ 
sender.selected = !sender.selected; 
} 

prosty koleś

+8

co jeśli 'button.selected =! Button.selected;' najprostszy gość! : D –

+0

hmm to dobrze :) – Mashhadi

+1

Jeszcze lepiej: przełączanie '- (IBAction): (UIButton *) nadawca { sender.selected =! Sender.selected; } ' – AlexChaffee

Powiązane problemy