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];
}
Możesz to również zrobić raczej hackishly z jedną linią. "myCheckboxButton.selected =! myCheckboxButton.selected" – Diziet
można uniknąć tego, jeśli-else ustawia obraz dla stanu przycisku UIControlStateSelected;) – Climbatize