showViewController不工作

时间:2014-11-15 09:27:26

标签: ios xcode swift xcode6

我正在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'

3 个答案:

答案 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 { }