【问题标题】:When do you use and access IB objects with viewWithTag instead of via IBOutlet property?您何时使用 viewWithTag 而不是通过 IBOutlet 属性来使用和访问 IB 对象?
【发布时间】:2011-08-12 15:13:04
【问题描述】:

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

【问题讨论】:

    标签: iphone objective-c properties iboutlet


    【解决方案1】:

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

    这样我就可以做到:

    UIButton *desiredButton = [myView.viewWithTag:theTag]
    

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

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

    【讨论】:

      【解决方案2】:

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

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

      考虑我是否应该将此答案设为 wiki,以便其他人可以为它做出贡献。将等待其他人将他们的答案放在这里。

      【讨论】:

      • 第 2 点正好展示了我处理按钮操作的首选方式之一。我忘了在我的回答中提及。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-03
        • 1970-01-01
        相关资源
        最近更新 更多