1

我对 iPhone SDK 相当陌生,所以如果这个答案非常明显,请原谅我。

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

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

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

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

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

将“对象”拖入 Interface Builder,并将类设置为: MyCustomClass 将 IBOutlet 'myLabel' 从 MyCustomClass 连接到视图中的 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
4

4 回答 4

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或等价物。

于 2010-01-21T20:43:20.297 回答
2

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

于 2010-01-21T20:30:50.460 回答
2

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

myObject.myLabel.text = @"Your text";
于 2010-01-21T20:39:25.187 回答
0

好吧,您将标签称为两件事,首先是非 ibaction,然后是属性中的 ibaction。

于 2011-08-17T20:22:57.693 回答