2013-06-30 82 views
1

我想知道如何做到这一点,因为我得到一个错误访问错误。如何设置UIButton的titleLabel.text?

在我的应用程序中,我有81 UIButtonsIBAction附加到所有他们的Interface Builder,这IBAction应设置用户点击按钮的文本。我试图这样做:

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

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

但是,这进入一个错误的访问错误,我怎么能解决这个问题? 百万谢谢!

错误消息:EXC_BAD_ACCESS(代码= 1,地址=为0x0) (LLDB)

+0

你需要用完整的错误信息更新你的问题。附注 - 不要使用'stringWithFormat:'。你没有格式化任何东西。直接分配字符串:'button.titleLabel.text = myString;'。 – rmaddy

+0

感谢您的回答!我已经试图按照你所说的方式来做到这一点,但是它一直给出同样的错误。还有其他选择吗? – yeker3

+2

我没有给你答案。我告诉过你,你需要用完整的错误信息更新你的问题。其余的只是一个建议,而不是试图解决这个问题。发布完整的错误或者没有人能够提供帮助。 – rmaddy

回答

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]; 
} 
+0

谢谢!我终于跟着第二个选项! – yeker3

5

你不应该去标签文本直接设置,而使用UIButton setTitle:forState:

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

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

+0

我改正了,谢谢你的评论。但是,如果这应该解决我的错误,它不适合我 – yeker3