2012-08-11 120 views
0

我已经以编程方式更改了UIButton的按钮标题。我还分配了一个操作来更改按钮标题。现在当我点击按钮时,它会触发两个动作(一个具有相同的按钮标题,另一个具有更改)。但是,我想只触发一个操作来更改标题按钮。按钮在按下更改后的按钮标题时触发两个操作

我该怎么办?任何帮助,将不胜感激。

+0

只是简单的解决方案是只分配一个动作方法的按钮,并使用它的标题文本作为参数,并根据执行不同的语句使用if-else语句:) – 2012-08-11 11:55:12

回答

1

两个解决方案。在方法之间切换目标/动作或根据某些状态决定要执行的操作。

1.

- (void)method1:(id)sender; 
{ 
    [sender removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside]; 
    [sender addTarget:self action:@selector(method2:) forControlEvents:UIControlEventTouchUpInside]; 
} 

- (void)method2:(id)sender; 
{ 
    [sender removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside]; 
    [sender addTarget:self action:@selector(method1:) forControlEvents:UIControlEventTouchUpInside]; 
} 

2a上。

- (void)buttonTapped; 
{ 
    if (self.someState) { 

    } else { 

    } 
} 

2b。

- (void)buttonTapped:(UIButton *)button; 
{ 
    if ([[button titleForState:UIControlStateNormal] isEqualToString:@"First title"]) { 

    } else { 

    } 
} 
+0

谢谢,保罗。这工作完美无瑕。 – 2012-08-11 15:56:50

0

如果为控件状态touchupinside的同一个按钮分配两个动作,它将始终触发两个动作。您应该删除第一个动作,同时添加第二个动作并删除第二个动作,并在选择器功能的末尾再次添加第一个动作。

以下是该按钮的默认操作;

[button addTarget:self:action:@selector(actionOne)forControlEvents:UIControlStateTouchUpInside] 

在actionOne中,您可以调用remove observer for第一个动作并添加第二个动作。

[button addTarget:self:action:@selector(actionTwo)forControlEvents:UIControlStateTouchUpInside] 

而且在actionTwo功能,你做反向

+0

嗨。谢谢您的帮助。但是当我使用不同的UIControlState时,另一个标题不会在同一个按钮上触发不同的操作。看看我的代码。我可能会做错事。 if([urlresponse status code] == 200){myButton setTitle:@“Unfollow”forState:UIControlStateNormal]; //标题改变 } 如果([myButton.currentTitle isEqualToString:@ “取消关注”]){ [myButton的addTarget:自动作:@selector(unfollowButtonPressed :) forControlEvents:UIControlEventTouchUpInside]; } – 2012-08-11 12:49:42

0

而不是使两个条件

f([urlresponse status code] == 200) 
{ 
[myButton setTitle:@"Unfollow" forState:UIControlStateNormal]; //title changed 

[myButton addTarget:self action:@selector(unfollowButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

} 

这可能是你的情况有帮助的。