ios - 3D Touch 在弹出 VC 时调用 viewDidDisappear

标签 ios 3dtouch

我在 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/

相关文章:

ios - 如何检查 View Controller 在 iOS 中是处于窥视模式 [3d touch] 还是全屏模式

ios - 转换倒置的表格 View 单元格中的 3D Touch Peek

ios - 让 XCUIElement 为自动化 UITest 执行 3D 触摸?

ios - 如何判断用户何时回答了 React-Native 中的 iOS 通知权限请求

android - 向应用程序提供 Quadtree GPS 数据的最佳选择?

ios - Xcode:无法加载配置文件。配置文件缺少所需的 UUID 属性

ios - 如何最好地通过 3D Touch 打开所需的 Controller ?

iOS 如何为来自 CollectionView 的图像上的 UIPreviewActions 确认 'Delete'

iphone - 优势iOS企业帐户和标准帐户之间有什么区别?

ios - 根据 if 语句设置 UITextField 占位符文本颜色