我正在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] ***由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [Throw.test showViewController: sender:]:无法识别的选择器发送到实例0x7f9552e7cc50'
答案 0 :(得分:11)
编译器没有抛出错误,因为您选择了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)
}
答案 1 :(得分:3)
您可以使用:
self.navigationController?.pushViewController(vc as WebsiteViewController, animated: true)
与iOS 7和iOS 8兼容
答案 2 :(得分:2)
更新 - 来自swift2的更好和推荐的API版本兼容性检查方法
if #available(iOS 8, *) {
self.showViewController(vc, sender: self)
} else {
self.navigationController?.pushViewController(vc, animated: true)
}
Bonus:使用@available属性来装饰单个函数或整个类,这将为您自己的API提供编译时版本检查
@available(iOS 8, *)
func compatibalityCheckForiOS8() -> Void { }