【发布时间】:2011-12-12 13:31:55
【问题描述】:
那么,这有什么线索吗?我不得不使用 [self dismiss modalviewcontroller 来关闭 modalviews。有趣的事实:在关闭 tabbarcontroller 时,我仍然可以使用对 parentviewcontroller 的引用,但在关闭常规视图控制器时,不是。
【问题讨论】:
标签: objective-c xcode ios5
那么,这有什么线索吗?我不得不使用 [self dismiss modalviewcontroller 来关闭 modalviews。有趣的事实:在关闭 tabbarcontroller 时,我仍然可以使用对 parentviewcontroller 的引用,但在关闭常规视图控制器时,不是。
【问题讨论】:
标签: objective-c xcode ios5
我找到了一篇很好的博客文章来解释这个问题:
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;
}
【讨论】:
【讨论】:
我在商店中拥有的应用程序是使用 ios SDK 4.3 构建的,并使用 self.parentViewController dismissModalViewControllerAnimated:YES。它继续适用于 IOS 5 设备。我认为它是基于 sdk 4.3 构建的。现在,当我使用新的 xcode 和 ios 5.0 sdk 更新它时,它不会按原样工作,我必须更改所有视图关闭内容以使用上面提到的条件选择器解决方法。(糟糕!)
只是想我会提到从父母那里解雇应该在 ios 5 上工作(至少在我的情况下使用 ios 4.3 sdk)。我不能代表以前的 sdks 或其他带有 parentViewController 的选择器。
【讨论】:
对于您关闭模态视图控制器的特定用例,您可能需要牢记 Apple 文档 -dismissModalViewControllerAnimated: 中讨论部分的 第二段。
父视图控制器负责解除模式 它使用呈现的视图控制器 presentModalViewController:animated: 方法。如果你调用这个方法 然而,在模态视图控制器本身上,模态视图 控制器自动将消息转发到其父视图 控制器。
但是,如果您在模态视图控制器本身上调用此方法, 模态视图控制器自动将消息转发到它的 父视图控制器。
Jason 的解决方案也很棒而且很有帮助!谢谢!
【讨论】:
-(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;
}
}
【讨论】:
[self respondsToSelector:@selector(presentingViewController)];。另外,不要在方法前面加上get。
在 iOS 5 上,您需要使用 presentingViewController 选择器而不是 parentViewController 选择器。
【讨论】: