【问题标题】:ViewController won't update after loadViewController 在加载后不会更新
【发布时间】:2012-01-02 23:56:06
【问题描述】:

我有两个使用导航栏的视图控制器。第一个 viewController 显示了我在第二个 viewController 上更改的一些数据。

因此,如果我加载第二个 viewController,NavBar 中会出现一个后退按钮,我可以更改我的值(并且它们被存储,我使用了调试器)。我的问题是,在点击 backButton 来到我的 firstView 控制器后,它并没有调用它的 viewDidLoad 方法。很明显,当不调用此函数时,根本没有更新值。

在第一次启动时,viewDidLoad 方法被调用并执行我希望它执行的操作。在 viewController 之间来回切换后,该方法不再被调用。

有什么解决办法吗?

谢谢!

编辑:

已解决

我不想删除我的问题,也许有人也需要这个:

每次视图出现时都会调用这个方法,可能默认没有定义:

-(void)viewDidAppear:(BOOL)animated
{
NSLog(@"View appeared.");
}

【问题讨论】:

    标签: ios xcode uiviewcontroller uinavigationcontroller


    【解决方案1】:

    但是viewWillAppear中的更新代码(如[[self view] setNeedsDisplay];)。

    为了清楚起见:viewDidLoad 在您的视图加载时被调用。这发生在第一次显示视图时。然后,当您导航到下一个视图时,仍然可以加载第一个视图(取决于您的代码)。因此,当您导航回该视图时,viewDidLoad 不会被调用,因为该视图仍然存在。

    但是每次要显示视图时(例如,当您导航回该视图时)都会调用方法 viewWillAppearviewDidAppear

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      ViewDidLoad 方法将在视图控制器分配初始化发生时被调用。在导航控制器向后移动的情况下,它不会创建任何新的视图控制器,而是重用导航堆栈中的先前引用。

      因此viewDidLoad 不会被调用。由于您的视图控制器已经在内存堆栈中。所以它只会让视图重新出现在窗口上,它会分别调用viewWillAppear

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-14
        • 2011-11-17
        • 2014-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多