IBOutlet混乱

时间:2012-01-21 17:57:56

标签: objective-c iboutlet

从Java / Android迁移到iOS / Objective-C后,我经历了一些混乱阶段,无法理解或找到有关以下内容的可行解释:

  • 什么是IBOutlet?
  • 它有什么用处?
  • 是否必须在每个实现文件中定义IBoutlet代码 头文件?

我们在java中有什么类似的东西?

4 个答案:

答案 0 :(得分:4)

<强> IBOutlet中

假设您在.xib接口文件中添加了UILabel,例如想要在运行时更改标签的文本,你必须以某种方式引用它。 通过添加IBOutlet关键字,您基本上可以告诉.xib文件您要将现有UILabel连接到此属性。 Interface Builder将识别,并使您可以将标签连接到您的代码。

@property (unsafe_unretained, nonatomic) IBOutlet UILabel *label;

但是,如果您从.xib初始化后永远不想更改Label,则无需创建属性。

<强> IBAction为

同样的事情将适用于UIButton上的函数。 例如。如果你在.xib文件中添加了一个按钮并希望在按钮点击事件上触发一个函数,你就会声明你的函数。

- (IBAction)buttonClicked:(id)sender;

同样,IBAction关键字只是告诉Interface Builder你想将这个函数连接到.xib文件中的任何内容(在我们的例子中是按钮)。

顺便说一下,简单地将某些东西称为IBOutlet或IBAction就没有任何反应。您必须返回Interface Builder并根据需要连接所有内容。

答案 1 :(得分:2)

由于您在Android方面经验丰富,我确信您已使用资源文件来引用项目中某个.xml视图的按钮或图像视图等子视图。

例如:

ImageView imageView = (ImageView) findViewById(R.id.myimageview);

虽然此属性将自动链接到Android中的资源文件,但这不会对您的iOS项目执行此操作。相反,您可以通过创建新的IBOutlet属性将子视图直接链接到专用的.h文件,并通过Interface Builder将其链接。

IBAction相同。虽然您可以直接引用按钮并通过

添加onClick侦听器
Button button = (Button) findViewById(R.id.mybutton);
button.setOnClickListener(this);

在“this”的onClick方法中接收动作,这在iOS项目中有所不同。再次,您将按钮将直接触发的操作链接到专用的.h文件,并使用IBAction标记来自XIB文件的操作(请参阅alex的答案)。 正如Mark Adams所说,IBOutlet和IBAction只不过是一个void typedef,只能由编译器使用。

答案 2 :(得分:1)

IBOutlet只是一个“抬头”,编译器能够在.xib文件和头文件之间创建链接。它类似于void,但需要创建与任何接口构建器文件的连接

答案 3 :(得分:0)

IBOutlet :如果将变量声明为IBOutlet,则将该变量放在Interface Builder的类的Outlet中。换句话说,您可以使用Interface Builder(从现在开始IB)将该变量连接到组件(当然具有相同的类)。

IB还有另一个特殊词: IBAction 。如果将方法的返回类型声明为IBAction,则将该方法作为可由Interface Builder辅助触摸按钮或其他操作的操作。没有必要返回任何特殊值,只是假设返回值为void。

如果您是iOS新手,只需提出建议:小心使用Interface Builder,因为所有必须由Interface Builder实例化的变量(如自定义UILabel或其他任何变量)都将使用方法initWithCoder而不是init或initWithNibName。我确实放了很多时间!

我希望它有所帮助。