2010-02-09 14 views
11

Próbuję utworzyć standardowe pole wyboru dla mojej aplikacji na iPhone'a z numeru UIButton z tytułem i obrazem. Obraz przycisku zmienia się między obrazem "niezaznaczonym" a "sprawdzonym".Jaki jest najlepszy sposób utworzenia pola wyboru UIButton?

Najpierw spróbowałem podklasy UIButton, ale UIButton nie ma metody -init*** do zastosowania w metodzie -init.

Jaki jest najlepszy sposób na zrobienie tego?

Z góry dziękuję.

Odpowiedz

38

Nie należy podklasy klasy UIButton. Z założenia cel C sprzyja kompozycji nad dziedziczeniem.

UIButton to podklasa UIControl, która ma właściwość selected. Możesz użyć tej właściwości, aby przełączyć działanie włączania/wyłączania pola wyboru, tak samo jak robi to UISwitch.

Możesz dołączyć skargę na przycisk dotknął się wewnątrz imprezę i wykonać przełączanie się tam coś takiego:

// when you setup your button, set an image for the selected and normal states 
[myCheckBoxButton setImage:checkedImage forState:UIControlStateSelected]; 
[myCheckBoxButton setImage:nonCheckedImage forState:UIControlStateNormal]; 

- (void)myCheckboxToggle:(id)sender 
{ 
    myCheckboxButton.selected = !myCheckboxButton.selected; // toggle the selected property, just a simple BOOL 
} 
+1

Możesz to również zrobić raczej hackishly z jedną linią. "myCheckboxButton.selected =! myCheckboxButton.selected" – Diziet

+4

można uniknąć tego, jeśli-else ustawia obraz dla stanu przycisku UIControlStateSelected;) – Climbatize

0

Czy próbowałeś przesłonić metodę initWithCoder, na wypadek gdyby została jakoś załadowana z końcówki?

+2

To nie jest prawdziwa odpowiedź. –

7

Ustaw obrazów w przycisk:

[button setImage:uncheckedImage forState:UIControlStateNormal] 
[button setImage:checkedImage forState:UIControlStateSelected] 

teraz wszystko, co musisz zrobić, to:

button.selected = state 

i zostaną wyświetlone poprawne obrazy.

+0

Przydatna odpowiedź ... – Biranchi

4

Wszystko, co musisz zrobić, to ustawić 2 różne obrazy dla stanów UIControlStateNormal i UIControlStateSelected, a następnie w selektorze zmienić właściwość przycisku selected.

Oto przykład roboczych (zamiast nazw obrazów z własnych):

- (void)loadView { 
    // ... 
    UIButton *chkBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [chkBtn setFrame:CGRectMake(0, 0, 300, 25)]; 

    [chkBtn setImage:[UIImage imageNamed:@"UNCHECKED.png"] 
      forState:UIControlStateNormal]; 
    [chkBtn setImage:[UIImage imageNamed:@"CHECKED.png"] 
      forState:UIControlStateSelected]; 

    [chkBtn addTarget:self 
       action:@selector(chkBtnHandler:) 
    forControlEvents:UIControlEventTouchUpInside]; 

    // Optional title change for checked/unchecked 
    [chkBtn setTitle:@"I am NOT checked!" 
      forState:UIControlStateNormal]; 
    [chkBtn setTitle:@"I am checked!" 
      forState:UIControlStateSelected]; 

    [self.view addSubview:chkBtn]; 
    [chkBtn release], chkBtn = nil; 
    // ... 
} 

- (void)chkBtnHandler:(UIButton *)sender { 
    // If checked, uncheck and visa versa 
    [sender setSelected:!sender isSelected]; 
} 
4

Dla wszystkich zainteresowanych w przyszłości - zamiast robić to sam wystarczy pobrać z poniższego linku z GitHub i to on podklasy z UIControl już działa i działa idealnie jako checkbox. zawiera również przykładowy projekt o tym, jak łatwo jest używać:

https://github.com/Brayden/UICheckbox

0
UIImage* nonCheckedImage=[UIImage imageNamed:@"ic_check_box_outline_blank_grey600_48dp.png"];//[UIImage init 
    UIImage* CheckedImage=[UIImage imageNamed:@"ic_check_box_black_48dp.png"];//[UIImage init 

    //ic_check_box_black_48dp.png 
    [_checkBox setImage:CheckedImage forState:UIControlStateSelected]; 
    [_checkBox setImage:nonCheckedImage forState:UIControlStateNormal]; 
} 

- (IBAction)checkBoxToggle:(id)sender { 
    _checkBox.selected = !_checkBox.selected; // toggle the selected property, just a simple BOOL 

} 

obraz można użyć google ikonę

0

Spróbuj tego: -

-(IBAction)clickCheckButton:(UIButton *)sender { 

    if (sender.tag==0) { 

    sender.tag = 1; 

    [sender setImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateNormal]; 

    }else 

    { 

    sender.tag = 0; 

    [sender setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal]; } } sender.tag = 0; 

    [sender setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal]; 

    } 
} 
+0

czego on nie chce spróbować? – chouaib

+0

jakie są twoje środki? nie rozumiem ? – King

+0

Mam na myśli, że nie zawsze chce się czegoś wypróbować bez wyjaśnienia – chouaib

0

Dlaczego nie użyć przełącznika - UISwitch? Służy do wyświetlania elementu pokazującego stan boolowski wartości.

Powiązane problemy