我以编程方式更改了 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 {
}
}
如果您为控制状态 touchupinside 的同一个按钮分配两个动作,它将始终触发两者。您应该在添加第二个动作时删除第一个动作并删除第二个动作本身并在选择器函数的末尾再次添加第一个动作。
以下是按钮的默认动作;
[button addTarget:self:action:@selector(actionOne)forControlEvents:UIControlStateTouchUpInside]
在 actionOne 中,您可以为第一个操作调用删除观察者并添加第二个操作。
[button addTarget:self:action:@selector(actionTwo)forControlEvents:UIControlStateTouchUpInside]
而在 actionTwo 函数中,你做相反的事情
而不是提出两个条件
f([urlresponse status code] == 200)
{
[myButton setTitle:@"Unfollow" forState:UIControlStateNormal]; //title changed
[myButton addTarget:self action:@selector(unfollowButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
}
这可能对您的情况有所帮助。