在显示具有清晰背景的当前ViewController之后,无法执行segue到另一个ViewController

时间:2016-07-03 18:49:30

标签: ios swift uiviewcontroller segue presentviewcontroller

我跟随Ray Wenderlich tutorial了解如何创建iOS图书动画,现在我正在尝试对其进行一些更改。

原始项目Navigation ControllerBooks View Controller组成 - 通过点击您可以打开它的图书显示一系列图书 - 以及Book View Controller - 显示所选书籍已打开。

我添加的内容View Controller并将其设置为初始VC;一个UIButton执行show segue到Navigation Controller

Here is my storyboard

我想在View Controller出现后在后台显示Books View Controller,但显然iOS会从视图层次结构中移除其下方的视图控制器,如果我将clearColor设置为{i},则会导致黑色背景属性检查器。然后我将以下代码添加到ViewController.swift以获得透明背景。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let vc = self.storyboard!.instantiateViewControllerWithIdentifier("BooksViewController") as! BooksViewController
    vc.view.backgroundColor = UIColor.clearColor()
    vc.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext
    self.presentViewController(vc, animated: true, completion: nil)
}

效果很好,我可以在看到书籍数组的同时看到背景中的初始VC,但我不能再通过点击一本书来执行Book View Controller。显然,openBook BooksViewController中的func selectedCell() -> BookCoverCell? { if let indexPath = collectionView?.indexPathForItemAtPoint(CGPointMake(collectionView!.contentOffset.x + collectionView!.bounds.width / 2, collectionView!.bounds.height / 2)) { if let cell = collectionView?.cellForItemAtIndexPath(indexPath) as? BookCoverCell { return cell } } return nil } func openBook(book: Book?) { let vc = storyboard?.instantiateViewControllerWithIdentifier("BookViewController") as! BookViewController vc.book = selectedCell()?.book dispatch_async(dispatch_get_main_queue(), { () -> Void in self.navigationController?.pushViewController(vc, animated: true) return }) } 从未被调用过:

{{1}}

我无法理解问题出在哪里,真的很感激任何帮助。请保持温和,我还在学习Swift,英语不是我的母语。

1 个答案:

答案 0 :(得分:1)

您正在使用prepareForSegue错误。您不希望在prepareForSegue中显示视图控制器。使用segue.destinationViewController作为! YourViewController改为引用它