Xcodeでプログラムによってボタンにアクションを追加するにはどうすればよいですか


105

インターフェイスビルダーからドラッグしてボタンにIBActionを追加する方法を知っていますが、プログラムでアクションを追加して時間を節約し、頻繁に切り替えられないようにします。解決策はおそらく本当に簡単ですが、検索しても答えが見つからないようです。ありがとうございました!

回答:


222

これを試して:

スウィフト4

myButton.addTarget(self,
                   action: #selector(myAction),
                   for: .touchUpInside)

Objective-C

[myButton addTarget:self 
             action:@selector(myAction) 
   forControlEvents:UIControlEventTouchUpInside];

アップルのドキュメントで豊富な情報源を見つけることができます。UIButtonのドキュメントを見ると、UIButtonが、ターゲット追加するメソッドを実装するUIControlの子孫であることがわかります。

-

myActionに コロンを追加するかどうかに注意を払う必要がありますaction:@selector(myAction)

ここに参照があります。


ボタンが押されたときにセレクターにパラメーターを渡したい場合(たとえば、UITableViewCell内にボタンがあり、セルのボタンが押されたときにそのセル内のオブジェクトを渡したい場合)はどうなりますか?
acecapades 2012年

1
@acecapades 2つを混ぜていると思います。performSelectorを使用する場合のようにパラメーターをアタッチすることはできません。UIControlの下位UIButtonによって使用されるアクションパターンは、controlEventがトリガーされたときに、特定のセレクターでターゲットに通知することです。これがあなたのケースで発生した場合、スーパービューを上に移動してボタンをカプセル化している人を確認し、テーブルセルを解決してリレーションをモデル化するメソッドを要求し、それを使用して何でも実行できます。
Nick Weaver

1
そうですか。それは理にかなっている。あなたの言っていることが理解できたと思います。ヒントニックをありがとう!
acecapades 2012年

誰かがこれを迅速に翻訳できますか?

23

迅速な答え:

myButton.addTarget(self, action: "click:", for: .touchUpInside)

func click(sender: UIButton) {
    print("click")
}

ドキュメント:https : //developer.apple.com/documentation/uikit/uicontrol/1618259-addtarget


UIControl.addTargetの呼び出しの「クリック」の後の「:」は何ですか?
dumbledad 2016年

1
セレクターは、:関数の引数のプレースホルダーとして使用します。以来はclick取るsenderに置き換えられ、引数、:セレクタ文字列にします。
Etan

これは、Swift 3で最近機能しました。正しい方向に
進む

14
CGRect buttonFrame = CGRectMake( 10, 80, 100, 30 );
        UIButton *button = [[UIButton alloc] initWithFrame: buttonFrame];
        [button setTitle: @"My Button" forState: UIControlStateNormal];
        [button addTarget:self action:@selector(btnSelected:) forControlEvents:UIControlEventTouchUpInside];
        [button setTitleColor: [UIColor redColor] forState: UIControlStateNormal];
[view addSubview:button];

2つ以上のアクションを追加することは可能ですか?
ErasmoOliveira 2015年

9

これを試して:

まず、これをビューコントローラーの.hファイルに書き込みます

UIButton *btn;

これを、viewcontrollers viewDidLoadの.mファイルに書き込みます。

btn=[[UIButton alloc]initWithFrame:CGRectMake(50, 20, 30, 30)];
[btn setBackgroundColor:[UIColor orangeColor]];
//adding action programatically
[btn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];

この外部のviewDidLoadメソッドを、ビューコントローラーの.mファイルに書き込みます。

- (IBAction)btnClicked:(id)sender
{
   //Write a code you want to execute on buttons click event
}

8
 CGRect buttonFrame = CGRectMake( x-pos, y-pos, width, height );   //
 CGRectMake(10,5,10,10) 

 UIButton *button = [[UIButton alloc] initWithFrame: buttonFrame];

 button setTitle: @"My Button" forState: UIControlStateNormal];

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

 [button setTitleColor: [UIColor BlueVolor] forState:
 UIControlStateNormal];

 [view addSubview:button];




 -(void)btnClicked {
    // your code }

6

Swift 3の場合

最初にボタンアクションの関数を作成してから、その関数をボタンターゲットに追加します

func buttonAction(sender: UIButton!) {
    print("Button tapped")
}

button.addTarget(self, action: #selector(buttonAction),for: .touchUpInside)

3
UIButton *btnNotification=[UIButton buttonWithType:UIButtonTypeCustom];
btnNotification.frame=CGRectMake(130,80,120,40);
btnNotification.backgroundColor=[UIColor greenColor];
[btnNotification setTitle:@"create Notification" forState:UIControlStateNormal];
[btnNotification addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnNotification];


}

-(void)btnClicked
{
    // Here You can write functionality 

}

サンプルがどのように役立つかを説明するコメントをいくつか提供してください。
Nogard 2013年

UIButton * btnNotification = [UIButton buttonWithType:UIButtonTypeCustom]; btnNotification.frame = CGRectMake(130,80,120,40); //ボタンフレーム設定btnNotification.backgroundColor = [UIColor greenColor]; [btnNotification setTitle:@ "create Notification" forState:UIControlStateNormal]; //ボタンのタイトルを設定[btnNotification addTarget:self action:@selector(btnClicked)forControlEvents:UIControlEventTouchUpInside]; // add Target for button [self.view addSubview: btnNotification];}-(void)btnClicked {//ここで機能を記述できます}
user2677311

-(void)btnClicked {//ここでボタンのアクションを設定できます//例:次のビューコントローラに移動nextviewController * nextPage = [nextviewController alloc] init]; [self.navigationController pushviewcontroller:nextPage animated:YES]; }
user2677311 2013年

2

UIButtonから継承しUIControlます。これには、アクションを追加/削除するためのすべてのメソッドがあります:UIControl Class Reference。セクション「アクション・メッセージを準備して送信する」、表紙を見て– sendAction:to:forEvent:– addTarget:action:forControlEvents:


1
 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self 
       action:@selector(aMethod1:)
forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"Show View" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[view addSubview:button];   
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.