ボタンを選択したままにするには、ボタンが呼び出すメソッドでsetSelected:YESを呼び出す必要があります。例えば:
- (void) methodThatYourButtonCalls: (id) sender {
[self performSelector:@selector(flipButton:) withObject:sender afterDelay:0.0];
}
- (void) flipButton:(UIButton*) button {
if(button.selected)
[button setSelected:NO];
else
[button setSelected:YES];
}
[sender setSelected:YES]を呼び出すだけでなく、performSelectorを呼び出すと少し奇妙に見えることはわかっていますが、前者は機能しますが、後者は機能しません。
別のボタンが押されたときにボタンの選択を解除するには、現在選択されているボタンへのポインターを保持するインスタンス変数を追加することをお勧めします。新しいボタンに触れたときに、flipButton:を呼び出して、それに応じて古いボタンの選択を解除できます。したがって、コードは次のようになります。
インターフェイスへのポインタを追加します
@interface YourViewController : UIViewController
{
UIButton *currentlySelectedButton;
}
そしてこれらのメソッドを実装に
- (void) methodThatYourButtonCalls: (id) sender {
UIButton *touchedButton = (UIButton*) sender;
//select the touched button
[self performSelector:@selector(flipButton:) withObject:sender afterDelay:0.0];
if(currentlySelectedButton != nil) { //check to see if a button is selected...
[self flipButton:currentlySelectedButton];
currentlySelectedButton = touchedButton;
}
- (void) flipButton:(UIButton*) button {
if(button.selected)
[button setSelected:NO];
else
[button setSelected:YES];
}