プログラムでボタンクリックイベントを起動しますか?


126

プログラムでボタンクリックイベントを発生させる方法はありますか?UIViewにボタンを配置しましたが、特定のシナリオでは、ユーザーとして手動ではなく、コードを介してボタンをクリックしたいと思います。iOS開発で可能ですか?あなたの提案を提供し、その方法を教えてください。

ありがとう。

回答:


313

ケンの答えに似ていますが、ボタンを変更したり、複数のボタンを追加した場合にボタンの実際のアクションを追跡できるため、より柔軟です。

[button sendActionsForControlEvents:UIControlEventTouchUpInside];

8
これbutton.showsTouchWhenHighlighted = YESは、実際のタッチと同じようにボタンを強調表示しますか?
chown

2
この答えは素晴らしいb / cで、UISwitch(UIControlEventValueChanged)などの他のコントロールに簡単に変換できます。私の場合、ターゲット/アクションコードを直接呼び出すよりもはるかに優れていますb / cスイッチを切り替えたいです!どうも。
John Erck 2013年

いいえ、button.showsTouchWhenHighlighted = YESの場合、ボタンは強調表示されません。;(
リッチーハイアット

7
ハイライトが必要な場合は、これを行うことができます。[ボタンセットハイライト:はい]; [ボタンsendActionsForControlEvents:UIControlEventTouchUpInside]; [ボタンsetHighlighted:NO]; そしてそれは素晴らしい働きをします。-rrh
リッチーハイアット

こんにちは、@ zaky、送信アクションなしでアニメーションのみが必要な場合、どうすればよいですか?
ベンヒ2015年

13

上記と同じ問題がありました。私はコメントを投稿したでしょうが、私の評判は十分に高くありません。だから、代わりに私は完全な答えを投稿します:

[btn setHighlighted:YES];
[btn sendActionsForControlEvents:UIControlEventTouchUpInside];
[btn performSelector:@selector(setHighlighted:) withObject:NO afterDelay:0.25];

これにより、プログラムでボタンを押して、一見通常の時間だけボタンを強調表示します。Richieの提案は、ボタンが(たとえあったとしても)わずかな時間だけ強調表示されただけでは機能しませんでした。


強調表示されていません。描画は、現在のコードチャンクの実行が完了した後でのみ発生します。これは素晴らしい修正です。
mattsven 2014年

6

ユーザーがボタンを押したときに実行されるコードを実行しないのはなぜですか?

-(void)myMethod
{
   // do stuff
}

-(IBAction)myButtonClick:(id)sender
{
    [self myMethod];
}

-(void)clickMyButton
{
    [self myMethod];
    // OR
    [self myButtonClick:nil];
}

いいえ、必要なのはメソッドを呼び出すことではなく、ユーザーが手動でボタンをクリックしたときではなく、プログラムでボタンクリックイベントを起動する方法です。UIViewでプログラムによってUIButtonを作成しました。ユーザーではなく、プログラム自体を介して、一定の時間間隔後にボタンクリックイベントを自動的に発生させたいです。
Getsy、

そうすると、タッチを合成しないと実現できません。cocoawithlove.com/2008/10/…を参照してください。ただし、プライベートAPIを使用するため、このメソッドを使用してアプリをApp Storeに送信することはできません。通常、デバッグ目的で使用されます。
Evan Mulawski、2011

なぜタッチをシミュレートする必要があるのか​​、メソッドを呼び出すだけなのかは説明していませんが、これが最も簡単な方法です。タイマーアクションは任意のメソッドを呼び出すことができ、それが呼び出すメソッドは、ボタンの状態(選択、強調表示など)を変更することによってボタンが押されていることをUIにフィードバックできます。それがうまくいかない場合は、そうしてください。
XJones 2011

1

UIButtonについて話している場合は、UIButtonがタップされたときに呼び出されているのと同じメソッドを呼び出すだけです。例えば:

[self myButtonsTargetMethod];

いいえ、必要なのはメソッドを呼び出すことではなく、ユーザーが手動でボタンをクリックしたときではなく、プログラムでボタンクリックイベントを起動する方法です。UIViewでプログラムによってUIButtonを作成しました。ユーザーではなく、プログラム自体を介して、特定の時間間隔の後にボタンクリックイベントを自動的に発生させたいです。
Getsy

1

はい、

[_button setHighlighted:YES];
[_button sendActionsForControlEvents:UIControlEventTouchUpInside];
[_button setHighlighted:NO];

しかし、ここでの問題は、速すぎるため、これらのイベントを表示できないことです。したがって、NSTimerで上記のコードを試すことができます。

NSTimer *quick = [NSTimer scheduledTimerWithTimeInterval:2.5 target:self selector:@selector(MeFirst:) userInfo:nil repeats:NO];

MeFirstは私が作成したメソッドです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.