showViewController不工作
我正在SWIFT开发一个应用程序,我使用以下代码在按钮单击时显示视图控制器。
let storyboard = UIStoryboard(name: "Main", bundle: nil); var viewName:NSString = "websiteView" let vc = storyboard.instantiateViewControllerWithIdentifier(viewName) as WebsiteViewController self.showViewController(vc, sender: self)
当我为ios 8进行测试时,它可以正常工作,但在ios 7上,无论我做什么,我都会收到以下错误消息。 我在一个论坛上看到self.showViewController仅适用于ios 8,但编译器不会抛出错误,是否有人知道我是否可以使用它?
showViewController:sender:]: unrecognized selector sent to instance 0x7f9552e7cc50
2014-11-15 09:25:49.565抛出[80595:613] ***由于未捕获的exception’NSInvalidArgumentException’终止应用程序,原因:’ – [Throw.test showViewController:sender:]:无法识别的选择器发送到实例0x7f9552e7cc50′
编译器没有抛出错误,因为您选择了iOS 8.0(或8.1)SDK。 该方法确实只是iOS 8.0+。 如果你有条件地调用它,你可以选择使用它,如下所示:
if (self.respondsToSelector(Selector("showViewController"))) { self.showViewController(vc, sender: self) } else { //An example of the alternate if you are using navigation controller self.navigationController?.pushViewController(vc, animated: true) }
您可以使用:
self.navigationController?.pushViewController(vc as WebsiteViewController, animated: true)
与iOS 7和iOS 8兼容
更新 – 来自swift2的更好和推荐的API版本兼容性检查方法
if #available(iOS 8, *) { self.showViewController(vc, sender: self) } else { self.navigationController?.pushViewController(vc, animated: true) }
额外:使用@available属性来装饰单个函数或整个类,这将为您自己的API提供编译时版本检查
@available(iOS 8, *) func compatibalityCheckForiOS8() -> Void { }