9

ユーザーがUIButtonに触れている状況があり、ユーザーがすでにUIButtonに触れている可能性がありますが、それをキャンセルするか、失敗させる必要があります。

button.enabledとuserInteractionEnabledを使用しようとしましたが、どちらもその場で機能しません。タッチを開始する前に、両方を設定する必要があります。

ボタンに触れた後、触れている間、ボタンを失敗させることはできますか?

4

5 に答える 5

9

ボタンに 2 つのアクションを登録する必要があります。1 つはタッチダウン用、もう 1 つはタッチアップ用です。タッチダウンで、キャンセルするかどうかを決定できます。タッチアップで、ボタンを押すための実際のロジックを記述します。

[button addTarget:self action:@selector(touchDown:) forControlEvents:UIControlEventTouchDown]; 

- (IBAction)touchDown:(id)sender
{
    UIButton *b = (UIButton*)sender;

    // Call this if you wish to cancel the event tracking
    [b cancelTrackingWithEvent:nil];
}

参考として、のドキュメントを参照-cancelTrackingWithEvent:UIControlてください。

于 2013-02-08T16:42:51.280 に答える
2

問題を解決するためにできることの 1 つは、押されたボタンの外観を必要に応じてカスタマイズすることです。使用する: – setBackgroundImage:@"NormalStateImage.png" forState: UIControlStateNormal – setBackgroundImage:@"HighlightedStateImage.png" forState: UIControlStateHighlighted

プロパティを NO に設定し、プロパティをadjustsImageWhenHighlightedNO に設定しますadjustsImageWhenDisabled

于 2013-02-08T16:25:38.720 に答える
1

これは、任意のUIButton. ユーザーがタッチダウンした時点でボタンの押下をキャンセルする場合は、次の手順を実行する必要があります。

  1. キャンセルを確認する必要があるイベントのハンドラーをセットアップします。この場合、ボタンが押されているとき。

    [yourButton addTarget: self
                   action: @selector(buttonIsDownHandler:)
         forControlEvents: UIControlEventTouchDown];
    
  2. ハンドラーで、プレスをキャンセルするかどうかを決定します

    -(IBAction) buttonIsDownHandler: (id) sender
    {
       if (needToCancelThisPress)
       {
          [yourButton cancelTrackingWithEvent: nil];
       }
    }
    
  3. ボタンのハンドラーはUIControlEventTouchCancel、キャンセル後に呼び出されます。

ボタンタッチのキャンセルはいつでもできます。たとえば、ユーザーが長押ししたときに追跡したい場合は、UIControlEventTouchDownハンドラーでタイマーを開始し、タイマーが切れたときにタッチをキャンセルできます。

于 2014-09-06T07:41:46.290 に答える
0

問題についてはわかりませんが、以下のような制御イベントに基づいてさまざまなアクションを実行できます

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

[button addTarget:self
                     action:@selector(onTouchDown:)
           forControlEvents:(UIControlEventTouchDown)]; 

[button addTarget:self
                     action:@selector(onTouchUpOutside:)
           forControlEvents:(UIControlEventTouchUpOutside)]; 

役に立たなかったり、探しているものだったらすみません。

于 2013-02-08T16:04:59.593 に答える
0

ボタンアクションが許可されているかどうかを示す BOOL 変数を用意し、必要に応じて確認してください。Enabled と userinteractionenabled は、一般的にタッチを無効にするだけです

于 2013-02-08T16:01:26.637 に答える