2011-01-12 59 views
4

我知道這個問題被問了很多次,而且我也實現了相同的基礎來追求我猜測的uibutton的標題。如何在運行時更改目標c中的uibutton標題?

讓我首先澄清我的問題。我有一個叫做btnType的uibutton,當點擊一個選擇器彈出時,選擇一個值後,我點擊完成按鈕隱藏選擇器,同時我用代碼

[btnType setTitle:btnTitle forState:UIControlEventTouchUpInside]; 
[btnType setTitleColor:[UIColor redColor] forState:UIControlEventAllEvents]; 
更改了uibutton的標題

但隨着我的前景,它不會改變,應用程序崩潰與信號EXC_BAD_ACCESS。我沒有得到我犯錯的地方。我已經將內存分配給了viewdidLoad的btnType。我正在使用

-(IBAction)pressAddType 
{ 
    toolBar.hidden = FALSE; 
    dateTypePicker.hidden = FALSE; 
} 

按下按鈕打開拾取器的事件。另外我想提一下,我已經與事件TouchUpInside的pressAddType與IB連接。

任何猜測?如果你能幫助我,我將不勝感激。 謝謝。

UPDATE:

@interface AddSettingPage : UIViewController<UITextFieldDelegate> 
{ 
    IBOutlet UIButton *btnType; 
    NSString *btnTitle; 
} 
@property (nonatomic, retain) IBOutlet UIButton *btnType; 
-(IBAction)pressAddType;//:(id)sender; 

而且

@synthesize btnType,btnTitle; 
+0

你能告訴我們你的初始化代碼嗎? – pt2ph8 2011-01-12 04:51:46

+0

我用初始化代碼更新了我的問題。 – Sarah 2011-01-12 06:02:53

回答

16

嘗試

[yourButton setTitle:@"your title" forState:UIControlStateNormal]; 
[yourButton setTitle:@"your title" forState:UIControlStateSelected]; 
[yourButton setTitle:@"your title" forState:UIControlStateHighlighted]; 

當拾取器被駁回,該按鈕(這是持有焦點的控制)將處於選擇狀態(或高亮..檢查出來)。

並在forState:參數中停止使用UIControlEventTouchUpInside。它不是一個國家,而是一個事件。你傳遞的是事件標識符而不是狀態標識符

4

你傳遞的setTitle國家應該像UIControlStateNormal:

[b setTitle:@"" forState:UIControlStateNormal]; 
+0

我之前使用過這個代碼,它沒有對按鈕標題做任何改變。 – Sarah 2011-01-12 05:24:53

+0

您可能還有其他問題,但我意外地錯誤地使用了forState:上週和事情沒有工作,直到我修復它。 – 2011-01-12 17:34:54

1

而不是

- (IBAction) pressAddType; 

聲明

- (IBAction) pressAddType:(id)sender; //or (UIButton *)sender 

並定義它像:

-(IBAction)pressAddType:(id)sender 
{ 
    toolBar.hidden = FALSE; 
    dateTypePicker.hidden = FALSE; 

    [(UIButton *)sender setTitle:btnTitle forState:UIControlEventTouchUpInside]; 
    [(UIButton *)sender setTitleColor:[UIColor redColor] forState:UIControlEventAllEvents]; 
} 

正如你所看到的,你並不需要,因爲它是作爲方法的參數傳遞給有你的按鈕伊娃當按下時。

+0

我實現了這個代碼,但一旦我按下按鈕,應用程序就會與nsexception一起弄碎:由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:' - [AddSettingPage pressAddType]:無法識別的選擇器發送到實例0x5a31b60'。所以我無法看到所做的更改。 – Sarah 2011-01-12 05:26:12

1

這個答案爲何只有沒有按鈕標題的變化,EXC_BAD_ACCESS錯誤只有你得到,當你試圖訪問這些對象的對象不在堆棧內存或對象具有空值。所以我的建議是請檢查你的對象(btnTitle)是否在記憶中?