我已经以编程方式更改了UIButton的按钮标题。我还分配了一个操作来更改按钮标题。现在当我点击按钮时,它会触发两个动作(一个具有相同的按钮标题,另一个具有更改)。但是,我想只触发一个操作来更改标题按钮。按钮在按下更改后的按钮标题时触发两个操作
我该怎么办?任何帮助,将不胜感激。
我已经以编程方式更改了UIButton的按钮标题。我还分配了一个操作来更改按钮标题。现在当我点击按钮时,它会触发两个动作(一个具有相同的按钮标题,另一个具有更改)。但是,我想只触发一个操作来更改标题按钮。按钮在按下更改后的按钮标题时触发两个操作
我该怎么办?任何帮助,将不胜感激。
两个解决方案。在方法之间切换目标/动作或根据某些状态决定要执行的操作。
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 {
}
}
谢谢,保罗。这工作完美无瑕。 – 2012-08-11 15:56:50
如果为控件状态touchupinside的同一个按钮分配两个动作,它将始终触发两个动作。您应该删除第一个动作,同时添加第二个动作并删除第二个动作,并在选择器功能的末尾再次添加第一个动作。
以下是该按钮的默认操作;
[button addTarget:self:action:@selector(actionOne)forControlEvents:UIControlStateTouchUpInside]
在actionOne中,您可以调用remove observer for第一个动作并添加第二个动作。
[button addTarget:self:action:@selector(actionTwo)forControlEvents:UIControlStateTouchUpInside]
而且在actionTwo功能,你做反向
嗨。谢谢您的帮助。但是当我使用不同的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
而不是使两个条件
f([urlresponse status code] == 200)
{
[myButton setTitle:@"Unfollow" forState:UIControlStateNormal]; //title changed
[myButton addTarget:self action:@selector(unfollowButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
}
这可能是你的情况有帮助的。
只是简单的解决方案是只分配一个动作方法的按钮,并使用它的标题文本作为参数,并根据执行不同的语句使用if-else语句:) – 2012-08-11 11:55:12