我的视图中有2个按钮,事件必须在每个selector
之间切换
换句话说(非代码):
button1 selector = button2 selector;
button2 selector = button1选择器;
修改:
事件就是这样,但负责两个按钮之间交换的代码是我需要的
我需要的是:
1 - 如何删除选择器并存储它以将其用于其他按钮
2 - 如何将已保存的选择器用作按钮选择器
PS
在我的代码button1和button2中有一个来自9个选择器的随机选择器,基于用户选择,然后进入包含我的两个按钮的视图
答案 0 :(得分:2)
我通常会在某处创建一个BOOL,并检查它是否为真,并将代码指向需要去的位置。
-(IBAction)button1:(id)sender {
if (boolIsTrue) {
// do this
}
}
-(IBAction)button2:(id)sender {
if (!boolIsTrue) {
// do this
}
}
这样的事情会起作用。
答案 1 :(得分:1)
考虑对两个按钮使用相同的选择器 它使您的代码更优雅,更易于维护:没有动态选择器(更少的调试),所有情况都在同一个代码块中。 毕竟,你有一个“发件人”(这是UIButton本身) 您可以通过标签区分这两个按钮(如果按代码创建按钮,则可以是#defined),或者通过比较保留的按钮(您的选择)
-(IBAction)selectorForBothButtons:(id)sender
{
if ((UIButton*)sender.tag == FIRST_BUTTON_TAG ) {
if (!shouldSwapActions) {
do_something;
} else {
do_something_else ;
}
} else { //second button
other_actions..
}
}
答案 2 :(得分:0)
这假设您只有一个操作与每个按钮的目标相关联(假设为self
)。
NSString *oldAction1String = [[button1 actionsForTarget:self forControlEvent:UIControlEventTouchUpInside] objectAtIndex:0];
NSString *oldAction2String = [[button2 actionsForTarget:self forControlEvent:UIControlEventTouchUpInside] objectAtIndex:0];
SEL oldAction1 = NSSelectorFromString(oldAction1String);
SEL oldAction2 = NSSelectorFromString(oldAction2String);
[button1 removeTarget:self action:oldAction1 forControlEvents:UIControlEventTouchUpInside];
[button1 addTarget:self action:oldAction2 forControlEvents:UIControlEventTouchUpInside];
[button2 removeTarget:self action:oldAction2 forControlEvents:UIControlEventTouchUpInside];
[button2 addTarget:self action:oldAction1 forControlEvents:UIControlEventTouchUpInside];
有很多重复代码的方法,但我觉得这种方式更具可读性。最后,此解决方案基于运行时情况真正交换操作,而不是依赖于在编译时分配特定操作,这应该满足您的更新要求。希望这有帮助!
答案 3 :(得分:0)
你也可以为button1和button2设置一个相同的选择器,然后你比较发送者对象和你的button1,button2
-(void)sameSelectorForButton1andButton2:(id)sender
{
if ((UIButton*)sender == button1)
{ //do something }
else if((UIButton*)sender == button2)
{ //do something }
}