如何在 xcode 中以编程方式向按钮添加操作

我知道如何通过从 Interface Builder 中拖动来添加一个 IBAction 到按钮中,但是我想通过编程的方式添加这个动作来节省时间,并且避免不断地来回切换。解决方法可能真的很简单,但是当我搜索它的时候,我似乎找不到任何答案。谢谢!

204759 次浏览

Try this:

Swift 4

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

Objective-C

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

You can find a rich source of information in Apple's Documentation. Have a look at the UIButton's documentation, it will reveal that UIButton is a descendant of UIControl, which implements the method to add targets.

--

You'll need to pay attention to whether add colon or not after myAction in action:@selector(myAction)

Here's the reference.

UIButton inherits from UIControl. That has all of the methods to add/remove actions: UIControl Class Reference. Look at the section "Preparing and Sending Action Messages", which covers – sendAction:to:forEvent: and – addTarget:action:forControlEvents:.

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];
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


}
 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];
 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 }

try this:

first write this in your .h file of viewcontroller

UIButton *btn;

Now write this in your .m file of viewcontrollers viewDidLoad.

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];

write this outside viewDidLoad method in .m file of your view controller

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

Swift answer:

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


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

Documentation: https://developer.apple.com/documentation/uikit/uicontrol/1618259-addtarget

For Swift 3

Create a function for button action first and then add the function to your button target

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


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

IOS 14 SDK: you can add action with closure callback:

let button = UIButton(type: .system, primaryAction: UIAction(title: "Button Title", handler: { _ in
print("Button tapped!")
}))

Getting a reference to the control sender

let textField = UITextField()
textField.addAction(UIAction(title: "", handler: { action in
let textField = action.sender as! UITextField
print("Text is \(textField.text)")
}), for: .editingChanged)

source