什么时候使用viewWithTag来访问IB对象,而不是通过IBOutlet属性



对于你需要管理的每个IBOutlet你需要有一个指针,所以也需要有一个属性。大多数时候属性需要被合成,然后在dealloc和viewDidUnload中释放。实际上,有一些代码需要你反复写。这样做的结果是代码易于使用和清晰。现在,使用和访问IB中的对象。view viewWithTag:]节省了一点代码空间,但给出了一点不清晰,因为您需要记住或检查对象标签的IB。那么,为什么有人会使用viewWithTag呢?

在我的例子中,我偶尔需要动态地向视图添加按钮,并且需要知道哪个按钮已被按下,或者召回其他按钮。

这样我就可以:

UIButton *desiredButton = [myView.viewWithTag:theTag]

我用来在enum中声明按钮类型(或任何视图类型),以便我可以安全地分配和稍后调用:

typedef enum {
  ButtonTypeDelete = 1,
  ButtonTypeCancel = 2,
  ButtonTypeAccept = 3,
  ....
  ..
} ButtonType

标签有很多很多的用途,也没有必要为每个视图元素都有一个出口。

  1. UITextfields要填写在一个很长的表单中,这里的标签可以用来自动移动光标到下一个字段
  2. 同一个IBAction可以连接到多个按钮,并且可以基于标签执行操作。

我在想是否应该把这个答案做成wiki,这样其他人就可以贡献了。我会等其他人把他们的答案放在这里。

您可以在不从NIBS加载接口的任何地方使用它。我个人从来没有使用过interfacebuilder,它通常是有帮助的,不存储指针到所有的子视图创建(这可能是很多),但标记他们,并在以后使用他们的标签来识别他们。我在UITableView的headerview中使用这种技术,我必须根据用户输入进行更改。

最新更新