具有多个参数选择器的UI按钮?

时间:2015-02-25 19:34:33

标签: ios objective-c uibutton

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

}

问题:从自己作为参数的按钮调用方法的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

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 {
  //...
}

在大多数情况下,事件参数在应用程序中未使用,因此您通常只会在源代码中看到action1action2的示例。对于您的特定用途,您将需要使用action2样式。如果需要,您可以将参数类型更改为UIButton *UIControl的任何其他子类。

答案 1 :(得分:2)

你的第一个想法几乎是最好的。使用addTarget:action:forControlEvents:方法时,action参数可以 - 如果需要 - 另外自动包含发件人,如文档中所述:

  

操作消息可以选择按顺序包括发件人和事件作为参数。

因此,只需按原样保留add_group:方法,并发出以下声明:

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

您的对象button将自动传递给操作方法add_group:。不要忘记结肠!​​