如何在目标c中运行时更改uibutton标题?

时间:2011-01-12 04:47:43

标签: iphone objective-c uibutton

我知道很多次都会问这个问题,而且我也正在实施相同的基础来追逐uibutton的标题。

首先让我澄清一下我的问题。我有一个名为btnType的uibutton,点击一个选择器弹出的内容,选择一个值后,我按完成按钮隐藏选择器,同时我用代码更改了uibutton的标题

[btnType setTitle:btnTitle forState:UIControlEventTouchUpInside];
[btnType setTitleColor:[UIColor redColor] forState:UIControlEventAllEvents];

但是我的surpriaze,它没有改变,应用程序崩溃与信号EXC_BAD_ACCESS。我没有得到我犯错的地方。我已经在viewdidLoad为btnType分配了内存。我也在使用

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

按下按钮打开拣货员的事件。另外我想提一下,我已经使用事件TouchUpInside与IB建立联系,用于pressAddType。

任何猜测?如果你能帮助我,我将不胜感激。 感谢。

更新:

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

另外

@synthesize btnType,btnTitle;

4 个答案:

答案 0 :(得分:17)

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

当拾取器被解除时,按钮(保持焦点的控件)将处于选中状态(或突出显示..检查出来)。

并停止在UIControlEventTouchUpInside参数中使用forState:。它不是一个国家,它是一个事件。您正在传递事件标识符而不是状态标识符

答案 1 :(得分:4)

你在setTitle中传递的状态应该类似于UIControlStateNormal:

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

答案 2 :(得分: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];
}

如您所见,您不需要将按钮作为ivar,因为它在按下时会作为方法的参数传递。

答案 3 :(得分:1)

这个答案为什么不仅仅更改按钮标题,只有当您尝试访问这些对象的对象不在堆栈内存或该对象具有空值时才会获得EXC_BAD_ACCESS错误。所以我的建议是请检查你的对象(btnTitle)是否在内存中?