使用条件语句以编程方式切换UIButton文本

时间:2012-04-23 17:26:37

标签: iphone objective-c ios

这是我的代码(它包含在按下按钮时调用的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也是如此 - 所以我很确定这不是我的连接问题。

出于某种原因,这不起作用,我确信我错过了一些非常简单的事情。

5 个答案:

答案 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)