2011-03-10 58 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];