ViewDidLoad只在导航时调用一次

时间:2014-01-07 09:42:13

标签: ios iphone ios7 uinavigationcontroller appdelegate

我有viewcontroller。我在appdelegate.m文件中创建了它的对象,因为我想在poptoviewcontroller方法中使用该viewcontroller。现在,一旦我在appdelegate文件中创建了它的对象,当我推动那个viewcontroller时,它只调用了一次viewdidload。但从第二次起,它不会调用viewdidload。我有一些组件,我想加载每个控制器加载。该怎么办??有没有其他方法可以在popToViewController方法中使用viewcontroller而无需在appdelegate.m文件中创建其对象

我有4个viewcontroller A,B,C,D。 我正在从A导航到B.我在B中有一些组件,我在viewdidLoad中加载。现在从A到B流我从组件服务器获得价值。并在B中显示。现在,如果用户想要更改值,那么他将从B重定向到C以更改B组件值。而且有时候他会重定向到D,而D从D弹出到B组件值。现在,如果我将在viewwillappear中编写我的B代码,那么当我从C返回到B时,它将加载从A到B导航时得到的值。

2 个答案:

答案 0 :(得分:3)

您可以使用viewWillAppearviewDidAppear(最后一个在第一个之后调用)。仅在构造ViewController时调用ViewDidLoad。然后,由于你让它存在于导航堆栈中,它不再被调用。

有关详细信息,请参阅此thread on stackoverflow

修改

通过编辑,整个问题变得与众不同。如果您希望每次显示ViewController时调用委托viewWillAppearviewDidAppear就是答案。

在我看来,你过于复杂化了。根据我的理解,你正在改变AppDelegate中的B?如果是这样,当你来自C并在viewWillAppear更新你的状态时,我看不到B有先前状态的任何问题。如果你在AppDelegate到B中有某种指针并且你改变了它,那么viewWillAppear应该没有任何问题。

您可以针对您的问题找到多种解决方案,这一切都取决于您的具体情况,但我建议您更好地分离模型。您可以创建一个包含B数据的单例,在viewWillAppear中,您可以获取该数据并显示它。然后C和D只对该单例执行更改。

答案 1 :(得分:0)

viewDidLoad方法只调用类的初始化,如果你有一些任务要在屏幕上出现视图而不是使用时反复做 viewWillAppear 要么 viewDidAppear 方法