我在 iOS 应用程序中使用 peek 和 pop 功能时遇到了困难。在我要弹出的VC中的viewDidDisappear方法中,有一个函数可以移除一些与模型相关的观察者。如果我现在查看新的 VC,它会初始化观察者。现在的问题是,如果我弹出 VC,它会调用 viewDidDisappear 方法并删除我想避免的这些观察者。如果用户取消 peek 操作,我只想删除观察者。我已经尝试过一些 bool 值,但没有成功。
解决这个问题的最佳方法是什么?
这是我的 3D Touch 设置
func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
guard let indexPath = tableView.indexPathForRowAtPoint(location) else { return nil }
guard let cell = tableView.cellForRowAtIndexPath(indexPath) else { return nil }
guard let detailVC = storyboard?.instantiateViewControllerWithIdentifier("PostDetailViewController") as? PostDetailViewController else { return nil }
let row = indexPath.row
detailVC.post = self.posts[row]
detailVC.preferredContentSize = CGSize(width: 0.0, height: 0.0)
if #available(iOS 9.0, *) {
previewingContext.sourceRect = cell.frame
}
return detailVC
}
func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
showViewController(viewControllerToCommit, sender: self)
}
最佳答案
尝试做类似的事情:
extension HomeViewController: PeekPopPreviewingDelegate {
func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
//...
}
func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
let detailViewController = viewControllerToCommit as! DetailViewController
detailViewController.shouldPresentCompleteMode = true
navigationController?.pushViewController(detailViewController, animated: true)
}
}
class DetailViewController: UIViewController {
var isPreviewMode = false
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
if isPreviewMode {
setupPreviewMode()
} else {
setupFullMode()
}
}
}
关于ios - 3D Touch 在弹出 VC 时调用 viewDidDisappear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35705799/