プログラムで UIButton のボタン タイトルを変更しました。また、変更されたボタンのタイトルにアクションを割り当てました。ボタンをタップすると、両方のアクションがトリガーされます(ボタンのタイトルが同じものと変更されたもの)。ただし、変更されたタイトル ボタンに対して 1 つのアクションのみをトリガーしたいと考えています。
どうすればできますか?どんな助けでも大歓迎です。
2 つのソリューション。メソッド間でターゲット/アクションを切り替えるか、状態に基づいて何をすべきかを決定します。
1.
- (void)method1:(id)sender;
{
[sender removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside];
[sender addTarget:self action:@selector(method2:) forControlEvents:UIControlEventTouchUpInside];
}
- (void)method2:(id)sender;
{
[sender removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside];
[sender addTarget:self action:@selector(method1:) forControlEvents:UIControlEventTouchUpInside];
}
2a.
- (void)buttonTapped;
{
if (self.someState) {
} else {
}
}
2b.
- (void)buttonTapped:(UIButton *)button;
{
if ([[button titleForState:UIControlStateNormal] isEqualToString:@"First title"]) {
} else {
}
}
コントロール ステート touchupinside の同じボタンに 2 つのアクションを割り当てると、常に両方がトリガーされます。最初のアクションを削除して 2 番目のアクションを追加し、2 番目のアクション自体を削除して、最初のアクションをセレクター関数の最後に再度追加する必要があります。
以下は、ボタンのデフォルトのアクションです。
[button addTarget:self:action:@selector(actionOne)forControlEvents:UIControlStateTouchUpInside]
actionOne では、最初のアクションの remove オブザーバーを呼び出して、2 番目のアクションを追加できます。
[button addTarget:self:action:@selector(actionTwo)forControlEvents:UIControlStateTouchUpInside]
そして actionTwo 関数では、逆のことを行います
2つの条件を作る代わりに
f([urlresponse status code] == 200)
{
[myButton setTitle:@"Unfollow" forState:UIControlStateNormal]; //title changed
[myButton addTarget:self action:@selector(unfollowButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
}
あなたの場合に役立つかもしれません。