对于问题的UILabel设定值(iPhone SDK)(Problem setting Value

2019-10-19 05:50发布

我在iPhone SDK合理的新的,所以请这个答案的荒谬明显见谅。

我有连接到的.xib文件视图控制器(他们被称为FirstViewController)

我也有叫MyCustomClass的自定义类。 在这个类中,我有一个这样的方法:

- (void)setTheText {
    [myLabel setText:@"foo"];
}

我想调用此方法来设置文本在FirstViewController.xib标签

到目前为止,我已经做到了这一点:

拖拽一个“对象”到界面生成器,并且类设置为:MyCustomClass视图连接起来从MyCustomClass的IBOutlet中“myLabel”到一个UILabel。

然而,当我运行该程序,并按下按钮来设置标签(这是在FirstViewController.m),是这样的:

- (IBAction)doSomething:(id)sender {
   MyCustomClass *customClass = [MyCustomClass alloc] init];
   [customClass setTheText];
}

这不,虽然设置。 NSLog(@"%@",[myLabel text]); 返回(空)

Xcode中未显示任何错误或警告,这可能是错了吗?

谢谢,

迈克尔

附加信息:

接口MyCustomClass.h:

#import <UIKit/UIKit.h>

@interface MyCustomClass : NSObject {
    UILabel *myLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *myLabel;

- (void)setTheText;

@end

Answer 1:

在这里您customClass的实例是完全无关的NIB。 你使用实例的alloc +一个新的对象。 如果要修改的特定MyCustomClass在你的NIB,然后FirstViewController需要指向它一个IBOutlet。



Answer 2:

你不想在你的操作方法来创建自定义类的新实例。

有几个方法可以做到你想要什么。

选项1是给您的视图控制器到您的自定义对象的引用。 要做到这一点,创造型的出口MyCustomClass *在你的视图控制器,连接该出口到您在XIB文件中创建新的对象,然后摆脱你的操作方法分配的:

- (IBAction)doSomething:(id)sender {       
    [customClass setTheText];
}

选项2就是让你CustomClass同时处理标签操作方法。 要做到这一点,你可以进一步简化。 把对出口UILabel到您的CustomClass ,然后简单地转换你的setTheText方法为行动:

- (IBAction)setTheText:(id)sender {
    [myLabel setText:@"foo"];
}

现在,连这一行动到你的按钮,一切都应该像一个魅力。

注意:你或许应该使用不以“set”开始的方法的名字,因为这些通常用于属性setter可可的KVC /国际志愿者组织系统的一部分。 相反,我会叫它像changeLabel ,或同等学历。



Answer 3:

的UILabel也有一个属性叫做文本设定值时,你可能会发现更容易。

myObject.myLabel.text = @"Your text";


Answer 4:

还有你叫你的标签两件事情,第一非IBAction为然后在属性的IBAction为。



文章来源: Problem setting Value for UILabel (iPhone SDK)