UITextView和UILabel子视图属性为零

时间:2014-07-10 22:53:53

标签: ios objective-c cocoa-touch uiview uiviewcontroller

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

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

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

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

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

po [self.profileEditView recursiveDescription] 

这对任何人来说都是熟悉的,如果是这样,我该如何解决它?

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

我之前从未见过这种情况,所以我认为这很奇怪。在这个视图控制器中肯定会发生很多事情。

其他详情:

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

感谢您的帮助!