【问题标题】:Public vs Private IBOutlets公共与私人 IBOutlets
【发布时间】:2014-07-14 20:58:01
【问题描述】:

我想知道当我需要从另一个视图控制器读取UILabel/UITextField的内容时,在以下两种可能性之间,什么是更好的做法:

1) 只需在 .h 文件中为UITextField 创建一个IBOutlet 并将其公开给所有人
2)在.h文件中创建NSStringreadonly属性,在实现文件中使其为可读写,每次privateUITextField变化时更新。

在我看来,第二个选项看起来更好的方法,因为它维护了 OOP 封装,但我在每个视图控制器中的每个 UITextField / UILabel 似乎都有很多工作要做。

想法? 谢谢!

编辑:另外,如果我需要能够从外部设置IBOutlets,但在-(void)prepareForSegue: 方法中。所以我猜第二个选项是唯一的选择?

【问题讨论】:

    标签: ios oop private encapsulation iboutlet


    【解决方案1】:

    只需在视图控制器中创建 getter 方法即可返回所需的数据。例如UITextField

    - (NSString *)getTextFieldText {
       return self.myTextField.text;
    }
    

    这种方式不需要添加冗余属性(NSString *)。 与封装一样,您隐藏了私有数据(即您的 IBOutlets)并仅公开其他人需要的数据

    【讨论】:

    • 所以我必须在头文件中为我在实现文件中声明的每个 IBOutlet 创建一个 getter 方法?
    • 与您想要访问的任何其他数据一样。你只是不暴露整个出口
    • 如果我还需要从外部设置它的能力怎么办?然后我是否必须为每个 IBOutlet 创建一个 setter 方法?
    • 好吧,如果您需要获取和设置,那么您的第一种方法可能是最简单的方法,但任何其他方式都可以为您想要在外部公开和更改的每个数据设置一个 getter/setter
    • @AnatolyAnatoly 正确。如果您使用故事板,则 UIKit 对象的出口不会做任何事情(因为 prepareForSegue:awakeFromNib 之前调用,这是出口首次可供您使用的时间。)
    猜你喜欢
    • 2017-02-17
    • 2013-01-31
    • 1970-01-01
    • 2015-12-11
    • 2012-08-03
    • 2011-01-09
    • 1970-01-01
    • 2014-01-17
    • 2016-05-30
    相关资源
    最近更新 更多