我在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
答案 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。