那么,有什么线索吗?我不得不使用[self dismiss modalviewcontroller来解雇modalviews。有趣的事实:当解雇tabbarcontroller时,我仍然可以使用对parentviewcontroller的引用,当解雇常规viewcontroller时,不是。
答案 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)
答案 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;
}