我使用Xcode 6.1.1和objective-c进行编码。我想要多个按钮,它们都调用相同的方法。通常我会这样做:
[button addTarget:self action:@selector(button_method) forControlEvents:UIControlEventTouchUpInside];
我想做的是,当我触摸一个按钮时,按钮会将自己发送到一个方法。类似的东西(当然这是错误的):
[button2 addTarget:self action:[button2 performSelector:@selector(method2:) withObject:button2] forControlEvents:UIControlEventTouchUpInside];
在这个方法中做一些类似的事情:
-(void)add_group:(UIButton*)button{
button.backgroundcolor=[UIColor greencolor];
}
问题:从按钮调用方法的正确方法是什么?
addTarget:action:forControlEvents:
接受最多带有两个参数的选择器。以下将全部正确发射:
[button addTarget:self action:@selector(action1) forControlEvents:UIControlEventTouchUpInside];
[button addTarget:self action:@selector(action2:) forControlEvents:UIControlEventTouchUpInside];
[button addTarget:self action:@selector(action3:event:) forControlEvents:UIControlEventTouchUpInside];
对于这样的处理程序:
- (void)action1 {
//...
}
- (void)action2:(UIControl *)control {
//...
}
- (void)action3:(UIControl *)control event:(UIEvent *)event {
//...
}
在大多数情况下,事件参数在应用程序中是未使用的,因此您通常只会在源代码中看到action1
或action2
的示例。对于您的特定用途,您需要使用action2
样式。如果需要,可以将参数类型更改为UIButton *
或UIControl
的任何其他子类。
您的第一个想法几乎是最好的。使用addTarget:action:forControlEvents:
方法时,如果您愿意,action
参数可能会自动包括文档中所述的发件人:
动作消息可以按顺序可选地包括发送者和事件作为参数。
因此,只需保持add_group:
方法的原样,并做出以下声明:
[button addTarget:self action:@selector(add_group:) forControlEvents:UIControlEventTouchUpInside];
您的对象button
将自动传递给操作方法add_group:
。别忘了冒号!