如何在Xcode中以编程方式向按钮添加动作


105

我知道如何通过从界面构建器中拖动来将IBAction添加到按钮,但是我想以编程方式添加该动作以节省时间并避免不断地来回切换。该解决方案可能真的很简单,但是我在搜索时似乎找不到任何答案。谢谢!

Answers:


222

试试这个:

斯威夫特4

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

目标C

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

您可以在Apple文档中找到丰富的信息来源。看一下UIButton的文档,它将发现UIButton是UIControl的后代控件实现了添加目标的方法。

-

你需要注意是否加冒号或之后不myActionaction:@selector(myAction)

这是参考


如果我想在按下按钮时将参数传递给选择器,该怎么办(例如,我在UITableViewCell中有一个按钮,并且想在按下单元格的按钮时在该单元格中传递对象)?
acecapades 2012年

1
@acecapades我认为您正在混合两件事。您不能像对performSelector那样附加参数。UIControl子级UIButton使用的操作模式是在触发controlEvent时通过特定选择器通知某些目标。在您的情况下,如果发生这种情况,您可以查看超级视图,以查看谁在封装您的按钮,并要求一种方法来解决表格单元与模型之间的关系,然后对该问题进行任何处理。
Nick Weaver 2012年

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 '16

1
选择器:在函数参数中有一个占位符。因为click采用sender参数,所以:在选择器字符串中将其替换为。
伊坦

这对我最近为Swift 3起作用。button.addTarget(self,action:#selector(ViewController.click),for:UIControlEvents.touchUpInside)func click(){print(“ click”)}感谢@Glauco Neves指出我们在正确的轨道上
uplearnedu.com 16-10-12

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

9

试试这个:

首先将其写入您的viewcontroller .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];

在视图控制器的.m文件中将此外部viewDidLoad方法写入

- (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:@“为State:UIControlStateNormal创建通知”; //设置按钮的标题[btnNotification addTarget:self action:@selector(btnClicked)forControlEvents:UIControlEventTouchUpInside]; //为按钮添加目标[self.view addSubview: btnNotification];}-(void)btnClicked {//您可以在此处编写功能}
user2677311 2013年

-(void)btnClicked {//这里您可以设置按钮的操作//示例:转到下一个视图控制器nextviewController * nextPage = [nextviewController alloc] init]; [self.navigationController pushviewcontroller:nextPage animation:YES]; }
user2677311

2

UIButton继承自UIControl。它具有添加/删除动作的所有方法:UIControl类参考。查看“准备和发送操作消息”部分,其中包括– 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];   
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.