IBOutlet和IBAction

时间:2009-10-29 11:15:54

标签: iphone objective-c interface-builder ibaction iboutlet

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

10 个答案:

答案 0 :(得分:203)

IBActionIBOutlet是定义的宏,用于表示可在Interface Builder中引用的变量和方法。

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

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

答案 1 :(得分:38)

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

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

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

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

答案 2 :(得分:32)

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

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

UILabel IBOutlet *myLabel;
-(IBAction) pushme;

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

答案 3 :(得分:6)

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

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

答案 4 :(得分:4)

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

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

@interface Controller
{
  IBOutlet id textField; // links to TextField UI object
}

- (IBAction)doAction:(id)sender; // e.g. called when button pushed

有关详细信息,请参阅Apple Docs

答案 5 :(得分:4)

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

通过查看流程,可以看到IBOutlets仅用于将属性名称与Nib文件中的控件名称匹配。

How nib file is loaded, screenshot of Matt's online book for iOS6

答案 6 :(得分:3)

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

答案 7 :(得分:1)

使用Interface Builder时,可以使用Connections Inspector使用事件处理程序设置事件,事件处理程序应该是具有IBAction修饰符的函数。视图可以与相同类型的参考和IBOutlet修改器链接。

答案 8 :(得分:0)

IBOutlet

  • 这是财产
  • 当nib(IB)文件被加载时,它成为连接到实例变量的封装数据的一部分。
  • 每个连接都已取消存档并重新建立。

IBAction

  • 属性表示该方法是可以从Interface Builder的情节提要中连接到的操作。

@-动态模式 IB-界面生成器

答案 9 :(得分:0)

关于此问题的

One of the top comments具体问:

  

所有答案都提到了相同类型的想法。.但是没有人解释为什么如果您的源代码中不包含IBAction / IBOutlet,Interface Builder似乎也能正常工作。

是IBAction和IBOutlet 的另一个原因吗?

NSHipster很好地回答了这个问题:

IBAction

https://nshipster.com/ibaction-iboutlet-iboutletcollection/#ibaction

  

早在2004年(也许更早),Interface Builder注意到 IBAction不再需要。在出口窗格中将可见带有签名-(void){name}:(id)sender的任何方法。

     

尽管如此,许多开发人员发现仍可以在方法声明中使用IBAction返回类型来表示特定的方法通过操作连接,这很有用。即使是不使用情节提要/ XIB的项目,也可能选择使用IBAction调用目标/操作方法。

IBOutlet:

https://nshipster.com/ibaction-iboutlet-iboutletcollection/#iboutlet

  

与IBAction不同,仍需要IBOutlet ,以便将代码中的属性与情节提要或XIB中的对象挂钩。

     

通常在视图或控件与其管理视图控制器之间建立IBOutlet连接(通常是在响应者可能将视图控制器作为目标执行的任何IBAction之外进行的操作)。但是,IBOutlet也可以用于公开顶级属性,例如另一个控制器或可以由引用视图控制器访问的属性。