以编程方式创建视图控制器时的属性范围

时间:2010-08-15 22:41:24

标签: iphone

我只是想知道为什么当我创建一个新的视图控制器时,我必须在为其属性赋值之前将控制器推入堆栈?如果我在推送之前分配一个值,为什么还没有发送到导航控制器的值呢?

这有效:

SomeViewController *newViewController = [[NewViewController alloc]initWith....];
[self.navigationController pushViewcontroller:newViewController animated:YES];
newViewController.property = value;

这不是:

SomeViewController *newViewController = [[NewViewController alloc]initWith....];
newViewController.property = value;
[self.navigationController pushViewcontroller:newViewController animated:YES];

类似地,如果我的新视图控制器具有UITextView属性,则在将其推入导航堆栈之前,我无法将其作为实例变量进行访问。我曾经想过,一旦我实例化了控制器,就可以访问实例变量了吗?

1 个答案:

答案 0 :(得分:0)

一般来说,您可以在推动控制器之前设置属性。你的第二个例子应该可以正常工作(我经常在我自己的代码中使用那个序列)。

但是,如果要处理与nib文件中的对象相连的IBOutlet属性,则通常不会立即连接它们。当从nib加载视图时(通常情况下,直到某些东西试图访问视图控制器的view属性),出口连接到新创建的UI对象。

这就是推送视图控制器后可以访问UI属性的原因。视图立即显示,强制加载,然后对象可用。

我的方法是存储在非IBOutlet属性中显示视图所需的值,这是我在推送视图之前设置的(或将其添加到选项卡控制器等)。然后我在-viewDidLoad-viewWillAppear中设置了UI对象。