ユーザーがUIButtonに触れている状況があり、ユーザーがすでにUIButtonに触れている可能性がありますが、それをキャンセルするか、失敗させる必要があります。
button.enabledとuserInteractionEnabledを使用しようとしましたが、どちらもその場で機能しません。タッチを開始する前に、両方を設定する必要があります。
ボタンに触れた後、触れている間、ボタンを失敗させることはできますか?
ユーザーがUIButtonに触れている状況があり、ユーザーがすでにUIButtonに触れている可能性がありますが、それをキャンセルするか、失敗させる必要があります。
button.enabledとuserInteractionEnabledを使用しようとしましたが、どちらもその場で機能しません。タッチを開始する前に、両方を設定する必要があります。
ボタンに触れた後、触れている間、ボタンを失敗させることはできますか?
ボタンに 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
てください。
問題を解決するためにできることの 1 つは、押されたボタンの外観を必要に応じてカスタマイズすることです。使用する:
– setBackgroundImage:@"NormalStateImage.png" forState: UIControlStateNormal
– setBackgroundImage:@"HighlightedStateImage.png" forState: UIControlStateHighlighted
プロパティを NO に設定し、プロパティをadjustsImageWhenHighlighted
NO に設定しますadjustsImageWhenDisabled
これは、任意のUIButton
. ユーザーがタッチダウンした時点でボタンの押下をキャンセルする場合は、次の手順を実行する必要があります。
キャンセルを確認する必要があるイベントのハンドラーをセットアップします。この場合、ボタンが押されているとき。
[yourButton addTarget: self
action: @selector(buttonIsDownHandler:)
forControlEvents: UIControlEventTouchDown];
ハンドラーで、プレスをキャンセルするかどうかを決定します
-(IBAction) buttonIsDownHandler: (id) sender
{
if (needToCancelThisPress)
{
[yourButton cancelTrackingWithEvent: nil];
}
}
ボタンのハンドラーはUIControlEventTouchCancel
、キャンセル後に呼び出されます。
ボタンタッチのキャンセルはいつでもできます。たとえば、ユーザーが長押ししたときに追跡したい場合は、UIControlEventTouchDown
ハンドラーでタイマーを開始し、タイマーが切れたときにタッチをキャンセルできます。
問題についてはわかりませんが、以下のような制御イベントに基づいてさまざまなアクションを実行できます
[button addTarget:self
action:@selector(onTouchUpInside:)
forControlEvents:(UIControlEventTouchUpInside)];
[button addTarget:self
action:@selector(onTouchDown:)
forControlEvents:(UIControlEventTouchDown)];
[button addTarget:self
action:@selector(onTouchUpOutside:)
forControlEvents:(UIControlEventTouchUpOutside)];
役に立たなかったり、探しているものだったらすみません。
ボタンアクションが許可されているかどうかを示す BOOL 変数を用意し、必要に応じて確認してください。Enabled と userinteractionenabled は、一般的にタッチを無効にするだけです