-self parentViewController- dismissModalViewController无法在iOS 5上运行

时间:2011-10-21 12:36:37

标签: objective-c xcode ios5

那么,有什么线索吗?我不得不使用[self dismiss modalviewcontroller来解雇modalviews。有趣的事实:当解雇tabbarcontroller时,我仍然可以使用对parentviewcontroller的引用,当解雇常规viewcontroller时,不是。

6 个答案:

答案 0 :(得分:22)

在iOS 5上,您需要使用presentingViewController选择器而不是parentViewController选择器。

答案 1 :(得分:3)

-(UIViewController *)getParentViewController{   
    float currentVersion = 5.0;
    float sysVersion = [[[UIDevice currentDevice] systemVersion] floatValue];

    if (sysVersion >= currentVersion) {
        // iOS 5.0 or later version of iOS specific functionality hanled here 
           return self.presentingViewController;
    }
    else {
        //Previous than iOS 5.0 specific functionality
           return self.parentViewController;

    }
}

答案 2 :(得分:1)

我在商店中使用的应用程序是使用ios SDK 4.3构建的,并使用self.parentViewController dismissModalViewControllerAnimated:YES。它继续与IOS 5设备一起使用。我认为它会因为它建立在sdk 4.3上。现在,当我用新的xcode和ios 5.0 sdk更新它时,它将无法正常工作,我必须更改所有视图关闭的东西,以使用上面提到的条件选择器解决方法。(哎!)

我想提一下,从父母那里解雇应该适用于ios 5(至少在我的情况下使用ios 4.3 sdk)。我不能用parentViewController代替以前的sdks或其他选择器。

答案 3 :(得分:1)

我已经构建了一个在iOS 4上添加presentingViewController的类别。

它在iOS 5上禁用自身。

您可以无缝使用它。请参阅backward-modal

答案 4 :(得分:0)

对于解雇模态视图控制器的特定用例,您可能需要牢记Apple -dismissModalViewControllerAnimated:文档中“讨论”部分的第二段

  

父视图控制器负责解除模态   查看它使用的控制器   presentModalViewController:animated:方法。如果你调用这个方法   然而,在模态视图控制器本身,模态视图   控制器自动将消息转发到其父视图   控制器。

     

但是,如果在模态视图控制器本身上调用此方法,   模态视图控制器自动将消息转发给它   父视图控制器。

杰森的解决方案也很棒,乐于助人!谢谢!

答案 5 :(得分:0)

我发现了一篇很好的博客文章解释了这个问题:

http://omegadelta.net/2011/11/04/oh-my-god-they-killed-parentviewcontroller/

在这篇文章之后,我为UIViewController创建了一个类别方法:

- (UIViewController*) myParentViewController {
    UIViewController* ret = [self parentViewController];
    if(ret == nil) {
        if([self respondsToSelector:@selector(presentingViewController)]) {
            ret = [self presentingViewController];
        }
    }
    return ret;
}