2010-02-09 15 views
11

Sto provando a creare una casella di controllo standard per la mia app per iPhone da un UIButton con un titolo e un'immagine. L'immagine del pulsante cambia tra un'immagine "deselezionata" e un'immagine "selezionata".Qual è il modo migliore per creare una casella di controllo UIButton?

All'inizio ho provato sottoclasse UIButton ma UIButton non ha un metodo -init*** da utilizzare nel mio metodo -init.

Qual è il modo migliore per farlo?

Grazie in anticipo.

risposta

38

Non è necessario creare sottoclasse della classe UIButton. In base alla progettazione, Objective-C favorisce la composizione sull'ereditarietà.

UIButton è una sottoclasse di UIControl, che ha una proprietà selected. È possibile utilizzare questa proprietà per attivare o disattivare il comportamento di una casella di controllo, proprio come fa lo UISwitch.

È possibile collegare un'azione al pulsante del ritoccato evento all'interno, ed eseguire la commutazione in là, qualcosa di simile:

// 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

Puoi anche farlo in modo un po 'approssimativo con una sola riga. 'myCheckboxButton.selected =! myCheckboxButton.selected' – Diziet

+4

puoi evitare l'if-else impostando un'immagine per lo stato del pulsante UIControlStateSelected;) – Climbatize

0

Hai provato a sovrascrivere il metodo initWithCoder, nel caso in cui fosse stato caricato da un pennino in qualche modo?

+2

Non una risposta davvero. –

7

Impostare le immagini nel tasto:

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

Ora tutto ciò che devi fare è:

button.selected = state 

e verranno visualizzate le immagini corrette.

+0

Risposta utile ... – Biranchi

4

Tutto ciò che dovete fare è impostare 2 immagini diverse per gli stati UIControlStateNormal e UIControlStateSelected, quindi nel selettore, modificare la proprietà selected del pulsante.

Ecco un esempio di lavoro (sostituire i nomi delle immagini con il proprio):

- (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

Per chiunque sia interessato al futuro - invece di fare da soli basta scaricare sul link qui sotto da GitHub ed ha una sottoclasse di UIControl già e funziona perfettamente come una casella di controllo. Include anche un progetto di esempio su come è facile da usare:

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 

} 

l'immagine è possibile utilizzare Google icona

0

Prova questo: -

-(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

cosa non vuole provare? – chouaib

+0

qual è il tuo mezzo ??? non sto capendo ? – King

+0

Voglio dire che non sempre si vuole provare qualcosa senza spiegazioni – chouaib

0

perché non utilizzare un interruttore - UISwitch? Questo è usato per mostrare un elemento che mostra lo stato booleano di un valore.

Problemi correlati