【问题标题】:stopping ios5 lifecycle events automatically being called停止自动调用 ios5 生命周期事件
【发布时间】:2012-01-18 21:59:40
【问题描述】:

我所有的视图控制器都扩展了我自己的 BaseViewController:UIViewController,并且我已经覆盖了这个

- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
    return NO;
}

然而,iOS 5 模拟器决定忽略这一点,并继续在我的嵌套 UIViewController 层次结构上调用我的 viewWillAppear 等方法。

我在另一个项目中做过同样的事情,而且效果很好。我还缺少什么让它听我的吗?

【问题讨论】:

    标签: objective-c ios uiviewcontroller ios5


    【解决方案1】:

    原来你也必须使用这个方法:

    UIViewController addChildViewController
    

    所以通过这样做:

    [self addChildViewController:_browserViewController];
    [browserView addSubview:_browserViewController.view];
    [_browserViewController didMoveToParentViewController:self]; 
    

    ..并从自动ForwardAppearanceAndRotationMethodsToChildViewControllers 返回 NO

    ... 它会阻止视图生命周期方法被调用两次。

    【讨论】:

    • 那么有什么解决方案可以在 iOS 4 和 5 中运行
    • 好吧,如果您运行的是 iOS 4 - 您不会自动调用嵌套的视图控制器 - 所以您不会遇到事情被调用两次的问题。 UIViewController 容器层次结构仅在 iOS 5 中引入。您的 iOS 4 应用程序应该像往常一样工作。请注意调用未定义的选择器,这些选择器对于更高的 iOS 版本来说是新的。
    • 那么答案就是在调用-addChildViewController:-didMoveToParentViewController:方法之前,你得先问问实例是否可以响应?
    • 你会这么认为,但有趣的是......不!我正在使用它并在带有 4.3.5 的 iPad 1 上运行我的应用程序。当我调试并尝试进入这一点时,GDB 只是忽略了我。我的猜测是,这个方法在 4.3.5 中已经被定义为私有方法,它什么也不做。如果其他人可以对此有所了解,我想知道为什么。但通常,是的,我会检查它是否响应选择器。通常我的所有项目中都有一个 BaseViewController - 所以我会把它放在这里并调用 [super addChild ... 如果它响应......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    相关资源
    最近更新 更多