2016-04-14 52 views
-1

因为我们大多数人在代码中而不是Interface Builder中创建视图,所以我开始想到IBOutlet和IBAction在Obj-C中是什么。当Interface Builder不被使用时,IBOutlet和IBAction在Objective C中相当于

这是真的,IBOutlet中的等效将等同于该属性的代表设置为视图控制器和IBAction为将相当于添加目标动作,例如:

rightButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

//这里

[rightButton addTarget:self action:@selector(firesRightButton) forControlEvents:UIControlEventTouchUpInside]; 

额外的垃圾//关闭以任务完成

如果有人能证实(或只是简单的状态正确的例子),那挺棒的。

这篇文章的直接原因是我看到IBOutlet在某个属性旁边的某个代码中声明,当时Interface Builder根本没有涉及到。

@interface SomeViewController : UIViewController 
@property (nonatomic, weak) IBOutlet UISwitch *switch; 
@end 

如果在项目中没有使用Interface Builder,这个开关IBOutlet的意思是什么?

是的,我们都知道,无论IBOutlet中,IBAction为预处理器解析后,不解决任何东西......

+0

如果您没有使用Interface Builder(并且我不知道是否可以说*大多数人使用代码而不是IB),那么@IBAction和@IBOutlet就没有意义了。 “@ IBOutlet”的“等价物”就是没有它的同一个属性,“@ IBAction”的“等价物”只是一个具有您设置为动作处理程序的正确签名的方法。 @IBOutlet与对象的委托属性完全不同。 – Paulw11

回答

1

没有等价物。 @IBOutlet@IBAction只是告诉Xcode你可以通过接口构建器连接这些东西的特殊预处理器指令。

因此,相当于@IBOutlet只是任何属性,我猜你恰好与您以编程方式设置布局结合使用。

@IBAction相当于简直是任何方法,您连线,以处理通过addTarget用户交互...

+0

实际上'IBOutlet'是一个'#define'。 'IBAction'是'void'的#define。它们不是“特殊的编译器指令”。它们是Interface Builder特别处理的普通旧C宏。而已。 – rmaddy

+0

对不起。意味着预处理器,而不是编译器。 – nhgrif

1

正如已经被nhgrif说,@IBOutlet和@IBAction只是对指令Xcode中。

最初的开发人员可能会将那些作为使用界面生成器制作的时间的人工制品。这些标签可以留在那里,并且在从代码访问和初始化时不会引起任何问题。

这也意味着如果项目要更改为使用界面构建器,则可以使用非常少量的代码更改进行更改。

相关问题