2012-07-20 98 views
34

我覺得這可能是一個愚蠢的問題......但無論如何,我有這種奇怪的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以及上述代碼中的聲明。該視圖位於導航控制器內部。

回答

65

您需要使用的,而不是設置titleLabel.text屬性setTitle:forState:方法:

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

現在會發生什麼事是你設置在表示當前狀態的視圖標籤的標題,但一旦狀態變化從推到正常時,按鈕將標籤重新設置爲新狀態的標題(這是您在IB中設置的文本)。

+0

你說得對,這是我的問題。非常奇怪的行爲,因爲我已經完成了完全相同的事情,沒有任何麻煩。 – Dustin 2012-07-20 16:35:24

+0

它「有時候工作!」很奇怪問題在於他們提到你使用.titleLabel來改變文本的**樣式**(等等)。真是麻煩! – Fattie 2013-12-10 21:42:50

5

這樣做的SWIFT版本

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

現在'startButton.setTitle(「開始」,爲:.normal)'直到他們再次改變它 – CupawnTae 2018-01-30 22:56:03