IBOutlet和IBAction

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

IBActionIBOutlet是macros定义来表示可以在Interface Builder中引用的variables和方法。

IBActionparsing为voidIBOutletparsing为无,但它们表示Xcode和Interface构build器可以在“接口”构build器中使用这些variables和方法来将UI元素链接到您的代码。

如果你不打算使用Interface Builder,那么你不需要它们在你的代码中,但是如果你打算使用它,那么你需要为在IB和IBOutlet使用的方法指定IBAction用于在IB中使用的对象。

传统的方法来标记一个方法,以便它会出现在Interface Builder中,并且你可以拖拽一个连接到它,一直使这个方法返回IBActiontypes。 然而,如果你让你的方法void,相反(IBAction被定义为void),并提供一个(id)参数,该方法仍然是可见的。 这提供了额外的灵活性,

所有这些都可以从界面生成器中看到:

 -(void) someMethod1:(id) sender; -(IBAction) someMethod2; -(IBAction) someMethod3:(id) sender; 

有关详细信息,请参阅Apple的Interface Builder用户指南,特别是标题为“Xcode集成”的部分。

如果您正在为GUI组件使用接口构build器(因此为IB前缀),则需要使用IBOutlet和IBAction。 需要IBOutlet才能将应用程序中的属性与IB中的组件关联起来,IBAction用于使您的方法与IB中的操作相关联。

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

 UILabel IBOutlet *myLabel; -(IBAction) pushme; 

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

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

IBOutlet和IBAction纯粹是作为Interface Builder在devise时分析代码时查找的标记,它们对编译器生成的代码没有任何影响。

IBAction和IBOutlets用于将Interface Builder中的界面与你的控制器连接起来。 如果您不使用Interface Builder并完全使用代码构build接口,则可以在不使用它们的情况下创build程序。 但实际上我们大多数人都使用Interface Builder,一旦你想在你的界面上进行一些交互,你将不得不使用IBActions和IBoutlets。

Outlet是从代码到UI的链接。 如果要显示或隐藏UI元素,如果要获取文本字段的文本或启用或禁用某个元素(或其他一百个元素),则必须在源中定义该对象的出口,并将该出口通过“界面对象”到UI元素。 之后,您可以像编码中的其他variables一样使用sockets。

IBAction – 由用户界面对象触发的特殊方法。 Interface Builder可以识别它们。

 @interface Controller { IBOutlet id textField; // links to TextField UI object } - (IBAction)doAction:(id)sender; // eg called when button pushed 

有关更多信息,请参阅Apple Docs

在考虑键值编码的同时进入图表,认为这可能有助于某人。 它有助于理解IBOutlet是什么。

通过查看stream程,可以看到IBOutlet只是在那里将属性名称与Nib文件中的控件名称进行匹配。

如何加载nib文件,Matt的iOS6在线书籍截图

当使用Interface Builder时,可以使用Connections Inspector来设置事件处理程序的事件,事件处理程序应该是具有IBAction修饰符的函数。 视图可以与相同types的引用和IBOutlet修饰符相关联。