带有多个参数选择器的 UIbutton?
UIbutton with multiple argument selector?
我在 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:
方法时,action
参数可能 - 如果您愿意 - 如文档中所述自动另外包含发件人:
The action message may optionally include the sender and the event as parameters, in that order.
因此,只需保持您的 add_group:
方法不变并进行以下声明:
[button addTarget:self action:@selector(add_group:) forControlEvents:UIControlEventTouchUpInside];
您的对象 button
将自动传递给操作方法 add_group:
。不要忘记冒号!
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
的任何其他子类。
我在 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:
方法时,action
参数可能 - 如果您愿意 - 如文档中所述自动另外包含发件人:
The action message may optionally include the sender and the event as parameters, in that order.
因此,只需保持您的 add_group:
方法不变并进行以下声明:
[button addTarget:self action:@selector(add_group:) forControlEvents:UIControlEventTouchUpInside];
您的对象 button
将自动传递给操作方法 add_group:
。不要忘记冒号!
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
的任何其他子类。