3

ビューに UIButton があります。次のようにイベント ハンドラーをアタッチします。

[self.button addTarget:self  
           action:@selector(button_touchUpInside:)      
 forControlEvents:UIControlEventTouchUpInside];

ハンドラーは次のようになります。

-(void) button_touchUpInside:(id)sender
{
    NSLog(@"%@", ((UIButton *)sender).enabled ? @"ENABLED" : @"DISABLED"); // Logs DISABLED
   // Do stuff
}

次のようにボタンを無効にします。

-(void)setEnabled:(BOOL)enabled
{
    enabled_ = enabled;
    self.button.enabled = enabled;
}

私の問題はenabled = NO、ボタンを設定した後TouchUpInsideでもハンドラーをトリガーすることです。ハンドラーでボタンが無効になっていることがわかりますが、ハンドラーはまだトリガーされています。

これを回避するにはいくつかの方法があることに注意してください-ハンドラーでbutton.enabledを確認する、以下の@sanchitsinghの回答など。私が知りたいのは、これが起こっている理由です。

4

3 に答える 3

4

私の個人的な経験から、この質問、および Web 上の他のスレッドから、UIControl.enabledに関する Apple のドキュメントは正しくないようであり、UIControl を無効に設定しても、タッチ イベントの取得は妨げられません。(メモリから、今は確認できません)クリック、タッチダウン、および現在のアクショントリガーイベントなどのいくつかのイベントのみを中和するため、タッチイベントを実際に取り除くには UserInteractionEnabled プロパティを効果的に使用する必要があります。

于 2012-07-10T07:06:50.800 に答える
4

コードにジェスチャが含まれているかどうかを確認してください。問題が発生する可能性があります。私はあなたがちょうど使うべきだと思います

 button.enabled = NO;
 button.userInteractionEnabled = NO;
于 2012-07-09T13:01:22.850 に答える
1

これを試して

button.userInteractionEnabled=NO;
于 2012-07-09T10:56:53.570 に答える