问题设置UILabel的价值(iPhone SDK)

时间:2010-01-21 20:25:28

标签: iphone xcode interface-builder uilabel

我在iPhone SDK上相当新,所以如果这个答案显而易见,请原谅我。

我有一个连接到.xib文件的ViewController(它们被称为FirstViewController)

我还有一个名为MyCustomClass的自定义类。在这个课程中,我有一个这样的方法:

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

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

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

将“Object”拖入Interface Builder,并将类设置为:MyCustomClass 将IBOutlet'myLabel'从MyCustomClass连接到视图中的UILabel。

但是,当我运行程序时,按下按钮设置标签(在FirstViewController.m中),如下所示:

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

但这并没有设定。 NSLog(@"%@",[myLabel text]);返回(null)

Xcode没有显示错误或警告,可能出现什么问题?

谢谢,

迈克尔

其他信息:

MyCustomClass.h的接口:

#import <UIKit/UIKit.h>

@interface MyCustomClass : NSObject {
    UILabel *myLabel;
}

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

- (void)setTheText;

@end

4 个答案:

答案 0 :(得分:3)

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

有几种方法可以做你想做的事。

选项1 是为视图控制器提供对自定义对象的引用。为此,请在视图控制器中创建类型为MyCustomClass *的插座,将该插座连接到您在XIB文件中创建的新对象,然后在操作方法中删除分配:

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

选项2 是让您的CustomClass同时处理标签的操作方法。为此,您可以进一步简化操作。将UILabel的出口放入CustomClass,然后只需将setTheText方法转换为操作:

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

现在,将该操作连接到您的按钮,一切都应该像魅力一样。

注意:您应该使用不以“set”开头的方法名称,因为它们通常用作属性设置器,作为Cocoa的KVC / KVO系统的一部分。相反,我会称之为changeLabel或类似的东西。

答案 1 :(得分:2)

此处的customClass实例与NIB完全无关。您已使用+ alloc实例化了一个新对象。如果要修改NIB中的特定MyCustomClass,则FirstViewController需要一个指向它的IBOutlet。

答案 2 :(得分:2)

UILabel还有一个名为text的属性来设置值,你可能会觉得更容易。

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

答案 3 :(得分:0)

你把你的标签称为两件事,首先是非ibaction然后是属性中的ibaction。