当前位置:  开发笔记 > 运维 > 正文

当视图控制器被置于视图堆栈的顶部时,如何让视图控制器运行更新代码?

如何解决《当视图控制器被置于视图堆栈的顶部时,如何让视图控制器运行更新代码?》经验,为你挑选了1个好方法。

我有一个viewController(Planner),它在应用程序启动时加载两个视图控制器(InfoEditor和MonthlyPlan).MonthlyPlan隐藏在InfoEditor后面(加载时).

所以我的问题是当我为MonthlyPlan交换InfoEditor时(MonthlyPlan被带到顶部)我如何才能更新MonthlyPlan视图的数据.应用程序启动时正在调用viewDidLoad中的NSLog(这是有道理的.)viewDidAppear和viewWillAppear中的NSLogs没有做任何事情.

有任何想法吗?

谢谢!

- 添加更多细节 -

我自己创建了视图层次结构.一个简单的viewController,只是加载另外两个viewControllers.两个子viewControllers同时加载(在启动应用程序时.)要交换两个视图,我正在使用此代码:

[self.view exchangeSubviewAtIndex:1 withSubviewAtIndex:0];

交换意见很好.缺少的部分只是告诉子视图的一些方式,你在前面,更新一些属性.



1> Andrew Grant..:

这里缺乏细节.你是如何"交换"这两种观点的?

如果您使用UINavigationController作为容器,那么每当您推送/弹出一个新的viewController时,都会调用viewWillAppear/viewDidAppear.这些调用由UINavigationController本身完成.如果您正在使用UINavigationController,那么请确保您的原型正确用于这些功能.

- (void)viewWillAppear:(BOOL)animated

如果您尝试自己实现视图层次结构,那么您可能需要自己进行这些调用,作为激活/停用视图的一部分.来自viewWillAppear的SDK页面;

如果属于视图控制器的视图直接添加到视图层次结构中,则视图控制器将不会收到此消息.如果向视图层次结构插入或添加视图,并且它具有视图控制器,则应直接向关联的视图控制器发送此消息.

更新:

使用新的详细信息问题很明显:在这种情况下,您必须按照SDK的建议自行发送消失/显示的消息.直接插入/删除/更改视图时,不会自动调用这些函数,它们由提供层次结构支持的更高级代码(例如UINavigationController)使用.

如果您考虑使用exchangeSubView的示例,那么没有任何东西正在消失,一个视图恰好覆盖另一个视图,完全或部分取决于它们的区域和不透明度.

我建议如果你想交换视图,那么你真的根据需要删除/添加,并手动将viewWillAppear/viewWillDisappear通知发送到他们的控制器.

例如

// your top level view controller
-(void) switchActiveView:(UIViewController*)controller animated:(BOOL)animated
{
    UIController* removedController = nil;

    // tell the current controller it'll disappear and remove it
    if (currentController)
    {
        [currentController viewWillDisapear:animated];
        [currentController.view removeFromSuperView];
        removedController = currentController;
    }

    // tell the new controller it'll appear and add its view
    if (controller)
    {
        [controller viewWillAppear:animated];
        [self.view addSubView:controller.view];
        currentController = [controller retain];
    }

    // now tell them they did disappear/appear
    [removedController viewDidDisappear: animated];
    [currentController viewDidAppear: animated];
    [removedController release];
}

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有