我只是想知道为什么当我创建一个新的视图控制器时,我必须在为其属性赋值之前将控制器推入堆栈?如果我在推送之前分配一个值,为什么还没有发送到导航控制器的值呢?
这有效:
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属性,则在将其推入导航堆栈之前,我无法将其作为实例变量进行访问。我曾经想过,一旦我实例化了控制器,就可以访问实例变量了吗?
答案 0 :(得分:0)
一般来说,您可以在推动控制器之前设置属性。你的第二个例子应该可以正常工作(我经常在我自己的代码中使用那个序列)。
但是,如果要处理与nib文件中的对象相连的IBOutlet属性,则通常不会立即连接它们。当从nib加载视图时(通常情况下,直到某些东西试图访问视图控制器的view属性),出口连接到新创建的UI对象。
这就是推送视图控制器后可以访问UI属性的原因。视图立即显示,强制加载,然后对象可用。
我的方法是存储在非IBOutlet属性中显示视图所需的值,这是我在推送视图之前设置的(或将其添加到选项卡控制器等)。然后我在-viewDidLoad
或-viewWillAppear
中设置了UI对象。