我跟随Ray Wenderlich tutorial了解如何创建iOS图书动画,现在我正在尝试对其进行一些更改。
原始项目由Navigation Controller
,Books View Controller
组成 - 通过点击您可以打开它的图书显示一系列图书 - 以及Book View Controller
- 显示所选书籍已打开。
我添加的内容:View Controller
并将其设置为初始VC;一个UIButton
执行show segue到Navigation Controller
。
我想在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,英语不是我的母语。
答案 0 :(得分:1)
您正在使用prepareForSegue错误。您不希望在prepareForSegue中显示视图控制器。使用segue.destinationViewController作为! YourViewController改为引用它