IBOutlet和IBAction

sus*_*use 155 iphone objective-c interface-builder iboutlet ibaction

在用于iPhone的Objective-C编码中使用IBAction和IBOutlet的目的是什么,如果我不使用它会有什么不同吗?

Jas*_*ien 204

IBActionIBOutlet定义宏以表示可在Interface Builder中引用的变量和方法.

IBAction解析voidIBOutlet解析为空,但它们向Xcode和Interface构建器表示可以在"接口"构建器中使用这些变量和方法将UI元素链接到您的代码.

如果您根本不打算使用Interface Builder,那么您的代码中不需要它们,但如果您要使用它,那么您需要指定IBAction将在IB和IBOutlet对象中使用的方法将在IB中使用.

  • @nerith方法和对象之间存在相同的差异.方法的IBActions,对象的IBOutlet. (3认同)

Mic*_*ers 38

标记方法以使其出现在Interface Builder中的传统方法,并且您可以将连接拖到它,已经使方法返回类型IBAction.但是,如果您使方法为void(IBAction是#define'd为void),并提供(id)参数,则该方法仍然可见.这提供了额外的灵活性

所有这三个都可以从Interface Builder中看到:

-(void) someMethod1:(id) sender; 
-(IBAction) someMethod2; 
-(IBAction) someMethod3:(id) sender;
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Apple的Interface Builder用户指南,尤其是标题为Xcode Integration的部分.


enn*_*ler 32

如果要为GUI组件使用接口构建器(因此使用IB前缀),则需要使用IBOutlet和IBAction.需要IBOutlet将应用程序中的属性与IB中的组件相关联,IBAction用于允许您的方法与IB中的操作相关联.

例如,假设您在IB中定义了一个按钮和标签.要通过按下按钮动态更改标签的值,您将在应用中定义一个操作和属性,类似于:

UILabel IBOutlet *myLabel;
-(IBAction) pushme;
Run Code Online (Sandbox Code Playgroud)

然后在IB中,您将myLabel与标签连接,并将pushme方法与按钮连接.您需要IBAction和IBOutlet才能在IB中存在这些连接.

  • 但如果你不包括IBOutlet标签,为什么__still work__? (13认同)
  • 因为这些宏在编译时不执行任何操作,所以它们就是这样,接口构建应用程序可以在源代码中找到这些方法和接口构建器文件,这样您就可以在接口构建器和代码之间进行拖动,一个连接使得它不会重要的是. (7认同)

Kaz*_*azR 6

Interface Builder使用它们来确定哪些成员和消息可以"连接"到您在窗口/视图中使用的界面控件.

IBOutlet和IBAction纯粹作为Interface Builder在设计时解析代码时所寻找的标记,它们对编译器生成的代码没有任何影响.


NSC*_*der 5

在查看键值编码时跑到图中,认为这可能对某人有所帮助。它有助于理解IBOutlet是什么。

通过查看流程,可以看到IBOutlets只是用来将属性名称与Nib文件中的控件名称进行匹配。

nib文件的加载方式,Matt的iOS6在线丛书的屏幕截图