Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 何时使用viewWithTag而不是通过IBOUTLE属性来访问IB对象?_Iphone_Objective C_Properties_Iboutlet - Fatal编程技术网

Iphone 何时使用viewWithTag而不是通过IBOUTLE属性来访问IB对象?

Iphone 何时使用viewWithTag而不是通过IBOUTLE属性来访问IB对象?,iphone,objective-c,properties,iboutlet,Iphone,Objective C,Properties,Iboutlet,对于您需要管理的每个IBOutlet,您需要有一个指针,因此也需要有一个属性。大多数情况下,属性都需要合成,然后在Dealloc和viewDidUnload中发布。实际上,有一小部分代码需要重复编写。您得到的是易于使用和代码清晰。现在,通过[self.view viewWithTag:]使用和访问IB中的对象可以节省一点代码空间,但会带来一点不确定性,因为您需要记住或检查IB中的对象标记。那么,为什么有人会费心使用viewWithTag呢 您可以在任何不从NIB加载接口的地方使用它。 我个人从不

对于您需要管理的每个IBOutlet,您需要有一个指针,因此也需要有一个属性。大多数情况下,属性都需要合成,然后在Dealloc和viewDidUnload中发布。实际上,有一小部分代码需要重复编写。您得到的是易于使用和代码清晰。现在,通过[self.view viewWithTag:]使用和访问IB中的对象可以节省一点代码空间,但会带来一点不确定性,因为您需要记住或检查IB中的对象标记。那么,为什么有人会费心使用viewWithTag呢

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

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

因此,我可以:

UIButton *desiredButton = [myView.viewWithTag:theTag]
我使用声明枚举中的按钮类型(或任何视图类型),以便以后可以安全地分配和调用:

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

标记有很多用途,而且不必为每个视图元素都有一个出口

  • UITextfields要以长格式填写,此处标记可用于将光标自动移动到下一个字段
  • 同一iAction可以连接到多个按钮,并且可以根据标签执行操作

  • 我在想我是否应该把这个答案做成一个维基,这样其他人就可以对此做出贡献。将等待其他人在此处给出答案。

    第2点正好显示了我处理按钮操作的首选方法之一。我在回答中忘了提到。