公共与私人 IBOutlets

Posted

技术标签:

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

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

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

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

想法? 谢谢!

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

所以我必须在头文件中为我在实现文件中声明的每个 IBOutlet 创建一个 getter 方法? 与您想要访问的任何其他数据一样。你只是不暴露整个出口 如果我还需要从外部设置它的能力怎么办?然后我是否必须为每个 IBOutlet 创建一个 setter 方法? 好吧,如果您需要获取和设置,那么您的第一种方法可能是最简单的方法,但任何其他方式都可以为您想要在外部公开和更改的每个数据设置一个 getter/setter @AnatolyAnatoly 正确。如果您使用故事板,则 UIKit 对象的出口不会做任何事情(因为 prepareForSegue:awakeFromNib 之前调用,这是出口首次可供您使用的时间。)

以上是关于公共与私人 IBOutlets的主要内容,如果未能解决你的问题,请参考以下文章

php 访问修改者:公共与私人

请问公共仓库和私人仓库有啥不同?

SonataMediaBundle 的公共和私人媒体上传到不同的文件夹(网络和私人)

Wordpress 拥有私人/公共帖子的安全方式

查询 - 向用户发送公共和私人消息

公共,私人 - 大写,小写: