29

当我尝试在 xib 和文件所有者之间创建连接时,有几种类型可供选择:

  • 出口连接
  • 动作连接
  • 出口收集连接

所有这些之间有什么区别?

4

5 回答 5

39

Outlet 和 Action 是 ViewController 与其 View 交互的方式(或连接/中介)。尽管它们在 iOS 相识的最初几天看起来很相似,但它们的用途不同:

出口ViewController talks to View by using Outlet。View 中的任何对象(UILabel、UIButton、UIImage、UIView 等)都可以与 ViewController 建立 Outlet 连接。Outlet@property在 ViewController 中使用,这意味着:
- 您可以使用 outlet 设置对象的某些内容(如更新 UILabel 的文本、设置 UIView 的背景图像等)。
- 你可以从一个对象中得到一些东西(比如 UIStepper 的当前值、NSAttributedString 的当前字体大小等)

Action:(View pass on messages about view to ViewController by using Action或者用技术术语来说,ViewController 将自己设置为ViewTarget中的 any Action)。Action 是MethodViewController 中的一个(与 ViewController 中的 Outlet 不同@property)。每当Event某个对象发生某些事情(任何)时(例如轻按 UIbutton),Action 就会将消息传递给 ViewController。Action(或Action方法)在收到消息后可以做一些事情。
注意:动作只能由 UIControl 的子对象设置;意味着你不能为 UILabel、UIView 等设置 Action。

在哪里\何时使用 Outlet 或 Action:
在刚接触 iOS 的最初几天,对 Action 和 Outlet 及其用法感到困惑是完全正常的。Outlet 和 Action 都可以完成一些小事情(比如获取按钮的文本/标题),但除此之外它们非常不同。使用其中一种或另一种时,请记住以上几点。

于 2013-07-06T11:14:26.083 回答
8

当您想要更改控件的某些属性(即文本颜色或标签的文本大小)时,使用Outlet 。

当您想要检测触发器时使用操作,即按下按钮时。

于 2015-06-18T13:46:36.710 回答
2

插座为您的类(通常是视图控制器)提供对 xib 中子视图的引用。当用户激活时,该操作提供了一个由控件(通常也是 xib 上的子视图)调用的方法。

换句话说,出口让 obj-c 代码访问 IB 中的对象;而该操作使 xib 控制访问 obj-c 代码。

于 2012-07-07T11:27:39.710 回答
2

出口和行动可视化

Outlet 和 Action 连接是 UIViewController 可以与其 UView 通信的直接方式。例如,当 View Controller 需要设置 UILabel 的文本时,它会通过 outlet 连接来完成。当点击 View 的 UIButton 对象时,它会使用操作连接将消息传递给 View Controller。这意味着在 View Controller 中创建的 outlet 被声明为 @property,并且通过声明方法来创建操作。

当您需要从代码向 Xcode 故事板中的用户界面对象发送消息时,将创建一个出口连接。对象可以是控件,例如按钮、滑块和开关,也可以是故事板中定义的任何其他对象,例如标签和进度条。例如,当您的代码确定标签应该显示一些文本时,代码会通过插座发送一条消息,告诉标签显示新文本。

当您需要从情节提要中的控件向您的代码发送消息时,将创建一个操作连接。控件是一种用户界面对象,当用户操作该对象时会产生动作或可见结果。例如,当用户点击一个按钮时,该按钮会向您的代码发送一条操作消息,告诉它执行适当的方法。可用于创建操作连接的其他控件示例是文本字段、滑块和开关。

参考资料: 1. https://medium.com/@GanChau/outlet-vs-action-connections-in-xcode-b5331fb233a1

于 2017-04-25T22:58:36.460 回答
0

出口连接:是连接一个属性或实例变量,形成当前文件所有者实例到 xib,当这个 xib 将被反序列化时,将连接到文件所有者对象

出口动作:正在将目标/动作添加到从xib到所有者类的指定出口(视图)

插座集合:类似于插座,但它将一组视图连接到单个插座变量

于 2012-07-07T11:19:54.490 回答