如何在iOS中检查视图控制器是否处于窥视模式[3d touch]或全屏模式

时间:2015-11-21 04:34:04

标签: ios iphone ios9 3dtouch

详细视图控制器支持peek模式。当我们以peek模式显示详细控制器时,我们需要在详细控制器中禁用工具提示/教程。我们如何识别视图控制器是以窥视模式还是全屏模式显示?

4 个答案:

答案 0 :(得分:5)

有一种不完美但实用的方法可以做到这一点。在许多情况下,除了peek模式之外,仅使用UINavigationController和/或UITabBarController。你可以通过这个来识别偷看模式。

let isPeeking = navigationController == nil
// or
let isPeeking = tabBarController == nil

答案 1 :(得分:3)

UIViewControllerPreviewing委托方法中实例化视图控制器时,可以设置一个变量来告诉它它所处的上下文。然后在视图控制器代码中做出相应的响应。

public func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
    //...

    let sb = UIStoryboard(name: "DocumentViewer", bundle: nil)
    guard let detailViewController = 
        sb.instantiateViewControllerWithIdentifier("DocumentViewerViewController") 
        as? DocumentViewerViewController else { return nil }

    detailViewController.isPeeking = true // <--- Set variable here

    // Other stuff here...

    detailViewController.preferredContentSize = CGSize(width: 0.0, height: 380.0)
    previewingContext.sourceRect = cell.frame

    return detailViewController
}

然后,在详细视图控制器内部,启用/禁用您需要的任何内容。

答案 2 :(得分:0)

没有直接的方法可以确定,但是当您在方法preferredContentSize中设置窥视func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController?时,您可以为视图的宽度设置观察者。

然后参考视图控制器的宽度。如果它与您的preferredContentSize相同(或小于UIScreen宽度),则处于peek模式,否则会弹出。

答案 3 :(得分:0)

您可以使用屏幕尺寸

检查窥视视图控制器的高度
override func viewDidLayoutSubviews() {

   super.viewDidLayoutSubviews()

   let screen = UIScreen.main.bounds
   if view.frame.height == screen.height { 
      // NOT peek mode
   } else {
      // Peek mode
   }

}