如何在两个UIButton选择器之间进行交换

时间:2012-10-09 15:03:08

标签: iphone objective-c ios xcode uibutton

我的视图中有2个按钮,事件必须在每个selector之间切换

换句话说(非代码):

button1 selector = button2 selector;

button2 selector = button1选择器;

修改

事件就是这样,但负责两个按钮之间交换的代码是我需要的

我需要的是:

1 - 如何删除选择器并存储它以将其用于其他按钮

2 - 如何将已保存的选择器用作按钮选择器

PS

在我的代码button1和button2中有一个来自9个选择器的随机选择器,基于用户选择,然后进入包含我的两个按钮的视图

4 个答案:

答案 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   }   
   }