有时我会将以下代码看作两种不同的格式:
格式1:
#import <UIKit/UIKit.h>
@interface MyViewController : UIViewController {
IBOutlet UILabel *myText;
}
@property (retain, nonatomic) UILabel *myText;
-(IBAction)buttonPressed:(id)sender;
@end
格式2:
#import <UIKit/UIKit.h>
@interface MyViewController : UIViewController {
}
@property (retain, nonatomic) IBOutlet UILabel *myText;
-(IBAction)buttonPressed:(id)sender;
@end
哪种格式正确?为什么呢?
答案 0 :(得分:3)
为了澄清Hack Saw所说的内容,并更直接地回答你的问题,将IBOutlet放在你的财产声明或你的实例变量声明中并不重要。
Hack Saw试图说的是IBOutlet和IBAction对编译器都没有任何意义(IBAction被编译成void)。它们存在的唯一原因是Interface Builder解析文件并列出开发人员认为应该关注的所有对象和方法。
答案 1 :(得分:2)
IBOutlet是界面构建器的标记,用于查找声明,并在IB的下拉列表中使用它们。
如果您希望IB将IB对象连接到代码中的引用,例如,将按钮连接到UIButton *声明,则严格要求它们。
所以,这里的基本思想是Interface Builder有一个它知道如何制作的对象列表。你可以在代码中创建这些对象,但很多时候,你不需要比IB提供的更多的功能,这实际上是相当多的。
在这些情况下,IB完全负责该对象。它分配它,并设置各种参数,并负责显示它。
然而,在大多数情况下,你显然也需要能够与它交谈。为了做到这一点,你声明一个指向对象的指针,比如UIButton * mybutton,但是为了让IB知道你想要连接它,你可以将IBOutlet添加到声明中。
IB列出变量,将按钮连接到文件所有者中的某个内容,或者有时是firstresponder,然后IB保存该连接数据,并在nib加载时设置所有内容。