如何设置UIButton的titleLabel.text?

时间:2013-06-30 16:12:06

标签: ios objective-c uibutton exc-bad-access

我想知道如何正确地执行此操作,因为我收到了错误访问错误。

在我的应用中,我有81 UIButtons,其中IBAction通过Interface Builder附加到所有这些,IBAction应该设置用户点按的按钮的文本。我试图这样做:

- (IBAction)changeTitle:(UIButton *)button {
    button.titleLabel.text = [NSString stringWithFormat:@"%@", myString];
}

-(IBAction)setMyString:(id)sender{
myString = [NSString stringWithFormat:@"text"];
}

然而,这会导致错误访问错误,我该如何解决? 百万谢谢!

错误消息:EXC_BAD_ACCESS(code = 1,address = 0x0) (LLDB)

2 个答案:

答案 0 :(得分:5)

您不应尝试直接设置标签文字,而是使用UIButton setTitle:forState:

- (IBAction)changeTitle:(UIButton *)sender {
  [button setTitle:myString forState:UIControlStateNormal];
}

label属性可用于配置标签的字体和其他属性等内容,但必须使用UIButton方法设置其中一些属性(颜色,阴影颜色和文本)

答案 1 :(得分:4)

您可能遇到内存管理问题。您没有使用@property来设置实例变量。您是手动设置它,因此您必须自己管理内存。

-(IBAction)setMyString:(id)sender{
    [myString release]; // release old instance
    myString = [[NSString stringWithFormat:@"text"] retain];
}

甚至更好,如果您还没有为变量创建@property并使用setter设置变量。像这样:

@property (copy, nonatomic) NSString *string; // in your @interface
@synthesize string = myString;                // in your @implementation

-(IBAction)setMyString:(id)sender{
    self.string = [NSString stringWithFormat:@"text"]; // setter will release old value, and retain new value
}

- (IBAction)changeTitle:(UIButton *)button {
    // you should not set the text of the titleLabel directly
    [button setTitle:self.string forState:UIControlStateNormal];
}