UIButton标题更改为默认值

时间:2012-07-20 16:26:41

标签: objective-c ios uibutton

我觉得这可能是一个愚蠢的问题......但无论如何我都有这种奇怪的UIButton标题行为。

该按钮已设置并连接到IB中的操作和属性(操作为startButtonPushed,属性为startButton)。在视图控制器内部,我的动作设置如下:

bool buttonStateStop;

- (IBAction)startPushed:(id)sender 
{
    if (buttonStateStop) 
    {
        [appD.locationManager stopSavingLocations];
        startButton.titleLabel.text = @"Start";
        buttonStateStop = NO;
    }
    else 
    {
        [appD.locationManager startSavingLocations];
        startButton.titleLabel.text = @"Stop";
        buttonStateStop = YES;        
    }
}

最初我将IB中的默认标题设置为“开始”,但每当我按下按钮时,它将变为“停止”几分之一秒然后返回。我花了一些时间试图弄清楚为什么标题一直回到“开始”。最终我将IB标题更改为“xxxxxx”,并意识到无论如何,在标题按钮更改后立即重新确认IB标题。

所以问题是:为什么IB不断将按钮的标题更改为默认值?我以前从未遇到过这种行为。并且(显然)我该如何解决它?

额外信息:对按钮的唯一引用是@property@synthesize以及上面代码中的语句。视图位于导航控制器内部。

2 个答案:

答案 0 :(得分:70)

您需要使用setTitle:forState:方法,而不是设置titleLabel.text属性:

[startButton setTitle:@"Start" forState:UIControlStateNormal];
// Normal and highlighted titles do not need to be the same
[startButton setTitle:@"Start!" forState:UIControlStateHighlighted];

现在发生的是你在标签中设置代表当前状态视图的标题,但是一旦状态从推动变为正常,按钮会将标签重置回新状态的标题(这是您在IB中设置的文本。

答案 1 :(得分:7)

快速版本是

startButton.setTitle("Start", forState: UIControlState.Normal)