UITextView 和 UILabel 子视图属性为零

Posted

技术标签:

【中文标题】UITextView 和 UILabel 子视图属性为零【英文标题】:UITextView and UILabel Subview Properties are nil 【发布时间】:2014-07-10 22:53:52 【问题描述】:

在我的一个视图控制器中,我有以下结构:

+-View
 +-Scroll View 1
  +-UIView
   +-Scroll View 2

...我将三个子视图添加到 Scroll View 2 中,其中一个包含一系列 UITextViews 和 UILabels 作为类似表单的结构。

我看到的问题是,当我尝试从视图控制器级别访问引用这些控件的属性时,它们将为零。但是,如果我在包含 UITextFields 和 UILabels 的 UIView 内的 awakeFromNib 中设置断点,则属性是有效的......这几乎就像引用消失了一样。

我可以清楚地看到它们存在,如果我在设置断点后在调试控制台中执行以下操作,我肯定会得到视图图输出到控制台:

po [self.profileEditView recursiveDescription] 

这听起来对任何人来说都很熟悉吗?如果是,我该如何补救?

我正在考虑做的一件事就是不尝试直接访问这些属性,因为目标是让视图控制器成为那些 UITextView 控件的代表,以便它可以通过调整 Scroll 来响应成为第一响应者每个文本视图获得焦点时视图 1 的位置。这只是更麻烦,但如果这是我必须做的,我会走那条路。

我以前从未见过这种情况,所以我觉得这很奇怪。这个视图控制器肯定发生了很多事情。

其他细节:

视图控制器在 Storyboard 中定义。 在运行时添加的 UIView 子视图具有我以编程方式加载的 XIB。

【问题讨论】:

您尝试访问 IBOutlet 的属性是否已注释,它们是否已连接到 xib 中? 您尝试通过什么方法访问它们? 【参考方案1】:

我发现了问题所在...我无意中将 另一个 子视图实例化为 initWithFrame 中的子视图(不要问我为什么要这样做...我想我在印象是我需要这样做以在那时实例化 XIB),因此嵌套子视图上的属性是有效的,但***视图(包含在 Scroll View 2 中的那个)的属性都是 nil。

我与新西兰的一位开发人员进行了 5 分钟的交谈,他问我在那里做什么,很明显我需要做的是在视图控制器中实例化视图及其 NIB:

ProfileEditView *view = [[[NSBundle mainBundle] loadNibNamed:@"ProfileEditView" owner:nil options:nil] objectAtIndex:0];

...而不是用 initWithFrame 实例化它。

感谢您的帮助!

【讨论】:

以上是关于UITextView 和 UILabel 子视图属性为零的主要内容,如果未能解决你的问题,请参考以下文章

如何在滚动视图中使 UIImage 低于 UILabel 或 UITextView

在自动布局中隐藏 UITextView 和 UILabel

UILabel 表现得很奇怪

使用 NSLayoutConstraints 在 UITextView 中将 UILabel 居中

UILabel UITextField UITextView

创建一个基于 UIView 的子视图自动调整大小的视图