1

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

出于某种原因,这不起作用,我确定我遗漏了一些非常简单的东西。

4

5 回答 5

2

使用 isEqualToString: 而不是 ==

于 2012-04-23T17:28:41.370 回答
2

if这是因为您缺少在第一个成功时跳过第二个的控制语句。当你进入带有 的块时"test",你将它切换到"test2",然后第二个条件立即成功,然后你又"test2"变成了"@test"

您可以使用 an来解决此问题,但您可以通过使用将当前状态映射到新状态的an 来完全else跳过。ifNSArray

// 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];
于 2012-04-23T17:29:11.030 回答
0
if ([myButton.currentTitle isEqualToString:@"test"]) {

  [myButton setTitle:@"test2" forState:UIControlStateNormal];
 }

if ([myButton.currentTitle isEqualToString:@"test2"]) {

   [myButton setTitle:@"test" forState:UIControlStateNormal];
}

希望对你有帮助...

于 2012-04-23T17:30:08.927 回答
0

比较用户可见的字符串通常被认为是不好的做法(当您需要执行 i18n 时会变得乏味),特别是对于字符串文字,因为它容易出现拼写错误。

如果您只是要在两种状态之间切换,最简单的方法是使用该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在按钮被选中和突出显示(触摸)时使用标题。

于 2012-04-23T17:51:57.347 回答
-1

将字符串相互比较时,请尝试使用if([str1 compare:str2] == NSOrderedSame)

于 2012-04-23T17:30:51.280 回答