2011-03-10 57 views
26

我有一個IBAction連接到我的Interface Builder中的按鈕。從xcode更改按鈕文本?

是否可以在運行時從我的代碼中更改按鈕(IB中)的文本?

+0

你的意思是'IBAction',還是你的意思是'IBOutlet'?插座是對象和實例變量之間的連接。 – 2011-03-10 19:28:01

回答

69

如果你有多數民衆贊成迷上了在你的代碼的操作按鈕,您可以更改標題沒有實例變量。

例如,如果按鈕被設置爲這個動作:

-(IBAction)startSomething:(id)sender; 

你可以簡單的做到這一點的方法:

-(IBAction)startSomething:(id)sender { 
    [sender setTitle:@"Hello" forState:UIControlStateNormal]; 
} 

或者,如果你想切換的名字按鈕,您可以創建一個名稱爲「buttonToggled」的BOOL(例如),並按以下方式切換名稱:

-(IBAction)toggleButton:(id)sender { 
    if (!buttonToggled) { 
     [sender setTitle:@"Something" forState:UIControlStateNormal]; 
     buttonToggled = YES; 
    } 
    else { 
     [sender setTitle:@"Different" forState:UIControlStateNormal]; 
     buttonToggled = NO; 
    } 
} 
+1

爲什麼要創建一個額外的變量來跟蹤按鈕的狀態,而不僅僅是查詢按鈕的文本本身?如果你堅持使用單獨的值來確定按鈕的文本,那麼我會建議使用'tag'屬性作爲按鈕而不是單獨的布爾值。 – FreeAsInBeer 2012-12-12 14:20:06

5

是的。有一種方法在UIButton -setTitle:forState:上使用。

17
UIButton *myButton; 

[myButton setTitle:@"My Title" forState:UIControlStateNormal]; 
[myButton setTitle:@"My Selected Title" forState:UIControlStateSelected]; 
4
[myButton setTitle:@"Play" forState:UIControlStateNormal]; 
3

myapp.h

{ 
UIButton *myButton; 
} 
@property (nonatomic,retain)IBoutlet UIButton *myButton; 

myapp.m

@synthesize myButton; 

-(IBACtion)buttonTitle{ 
[myButton setTitle:@"Play" forState:UIControlStateNormal]; 
} 
2

另一種方式來切換:

- (IBAction)signOnClick:(id)sender 
{ 
    if ([_signOnButton.titleLabel.text isEqualToString:@"Sign off"]) 
    { 
     [sender setTitle:@"Sign on" forState:UIControlStateNormal]; 
    } 
    else 
    { 
     [sender setTitle:@"Sign off" forState:UIControlStateNormal]; 
    } 
} 
1

沒有必要添加,如果{}否則{}控制流程。初始化的不同狀態下的按鈕文本在視圖或視圖控制器構造:

[btnCheckButton setTitle:@"Normal" forState:UIControlStateNormal]; 
[btnCheckButton setTitle:@"Selected" forState:UIControlStateSelected];

然後按鈕狀態切換到選定的:

[btnCheckButton setSelected:YES];

然後按鈕狀態切換到正常:

[btnCheckButton setSelected:NO];