我觉得这可能是个愚蠢的问题。。。但无论如何,我有这种奇怪的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
和上面代码中的语句。该视图位于导航控制器内部。
您需要使用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中设置的文本)。
这是的swift版本
startButton.setTitle("Start", forState: UIControlState.Normal)