7

Minimal Deployment Target如何在设置为 iOS 5.0的应用程序中支持 iOS6 的功能?

例如,如果用户有 iOS 5,他会看到一个UIActionSheet,如果用户有 iOS 6,他会看到不同UIActionSheet的 iOS 6?你怎么做到这一点?我有 Xcode 4.5 并且想要在 iOS 5 上运行的应用程序。

4

1 回答 1

19

您应该始终更喜欢检测可用的方法/功能,而不是 iOS 版本,然后假设方法可用。

请参阅Apple 文档

例如,在 iOS 5 中要显示一个模态视图控制器,我们会这样做:

[self presentModalViewController:viewController animated:YES];

在 iOS 6 中,presentModalViewController:animated:方法UIViewController是 Deprecated,你应该presentViewController:animated:completion:在 iOS 6 中使用,但是你怎么知道什么时候使用呢?

您可以检测 iOS 版本并使用 if 语句指示您是使用前者还是后者,但是,这很脆弱,您会犯错,也许未来较新的操作系统会有新的方法来做到这一点。

处理这个问题的正确方法是:

if([self respondsToSelector:@selector(presentViewController:animated:completion:)])
    [self presentViewController:viewController animated:YES completion:^{/* done */}];
else
    [self presentModalViewController:viewController animated:YES];

您甚至可以争辩说您应该更加严格并执行以下操作:

if([self respondsToSelector:@selector(presentViewController:animated:completion:)])
    [self presentViewController:viewController animated:YES completion:^{/* done */}];
else if([self respondsToSelector:@selector(presentViewController:animated:)])
    [self presentModalViewController:viewController animated:YES];
else
    NSLog(@"Oooops, what system is this !!! - should never see this !");

我不确定你的UIActionSheet例子,据我所知这在 iOS 5 和 6 上是一样的。也许你正在考虑分享,如果你在 iOS 5 上UIActivityViewController你可能想回退到一个,所以你UIActionSheet可能会检查课程是否可用,请参阅此处如何操作。

于 2012-09-25T19:47:46.573 回答