这是我的代码(它包含在按下按钮时调用的IBAction中):
if (myButton.currentTitle == @"test") {
[myButton setTitle:@"test2" forState:UIControlStateNormal];
}
if (myButton.currentTitle == @"test2") {
[myButton setTitle:@"test" forState:UIControlStateNormal];
}
我希望UIButton文本在按下时切换(如果text =“test”则更改为“test2”,如果text =“test2”更改为“test”则按下)。
我确实为myButton连接了一个IBOutlet,并且连接到myButton的IBAction也是如此 - 所以我很确定这不是我的连接问题。
出于某种原因,这不起作用,我确信我错过了一些非常简单的事情。
答案 0 :(得分:2)
使用isEqualToString:而不是==
答案 1 :(得分:2)
这是因为你缺少一个控制语句,当第一个成功时跳过第二个if
。当您使用"test"
进入阻止时,将其切换为"test2"
,然后第二个条件立即成功,然后将"test2"
转回"@test"
。
您可以使用else
来解决此问题,但您可以使用将当前状态映射到新状态的if
完全跳过NSArray
。
// This should be made static, and initialized only once
NSDictionary *nextTitle = [NSDictionary dictionaryWithObjectsAndKeys:
@"test", @"test2", @"test2", @"test", nil];
// This line does the toggling
[myButton setTitle:[nextTitle valueForKey:myButton.currentTitle] forState:UIControlStateNormal];
答案 2 :(得分:0)
if ([myButton.currentTitle isEqualToString:@"test"]) {
[myButton setTitle:@"test2" forState:UIControlStateNormal];
}
if ([myButton.currentTitle isEqualToString:@"test2"]) {
[myButton setTitle:@"test" forState:UIControlStateNormal];
}
希望,这会对你有帮助......
答案 3 :(得分:0)
比较用户可见的字符串通常被认为是不好的做法(当你需要做i18n时变得乏味),特别是对于字符串文字,因为它容易受到错别字的攻击。</ p>
如果您只是在两个状态之间进行切换,最简单的方法是使用UIControl.selected
属性(对应于UIControlStateSelected
):
// In init
[myButton setTitle:@"test" forState:UIControlStateNormal];
[myButton setTitle:@"test2" forState:UIControlStateSelected];
[myButton setTitle:@"test2" forState:UIControlStateSelected|UIControlStateHighlighted];
// Toggle
myButton.selected = !myButton.selected;
当您决定切换按钮图像/背景/文本颜色时,它还可以使代码更清晰。
注意轻微的问题:如果你没有为UIControlStateSelected|UIControlStateHighlighted
设置标题,当选择并突出显示(触摸)按钮时,它将使用UIControlStateNormal
的标题。
答案 4 :(得分:-1)
比较字符串时,请尝试使用if([str1 compare:str2] == NSOrderedSame)