0

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

换句话说(不是代码):

button1 选择器 = button2 选择器;

button2 选择器 = button1 选择器;

编辑

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

我需要的是:

1-如何删除选择器并将其存储以将其用于另一个按钮

2-如何使用保存的选择器作为按钮选择器

附言

在我的代码中 button1 和 button2 在进入包含我的两个按钮的视图之前,根据用户选择从 9 个选择器中随机选择

4

4 回答 4

2

我通常会在某处创建一个 BOOL 并检查它是否为真,然后将代码定向到需要去的地方。

-(IBAction)button1:(id)sender {

    if (boolIsTrue) {
        // do this
    }
}

-(IBAction)button2:(id)sender {

    if (!boolIsTrue) {
        // do this
    }
}

类似的东西会起作用。

于 2012-10-09T15:06:20.673 回答
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..  
}
}
于 2012-10-09T15:39:57.813 回答
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];

有很多方法可以绕过这么多重复的代码,但我觉得这种方式更具可读性。最后,此解决方案真正根据运行时情况交换操作,而不是依赖于在编译时分配特定操作,这应该可以满足您的更新要求。希望这可以帮助!

于 2012-10-09T15:37:03.533 回答
0

you can also have a same selector for both button1 and button2 ,then you compare sender object and your button1,button2

    -(void)sameSelectorForButton1andButton2:(id)sender
     {        
if ((UIButton*)sender == button1) 
     {     //do something          }
else if((UIButton*)sender == button2) 
     {      //do something   }   
   }
于 2012-10-09T17:09:20.210 回答