繁体   English   中英

在 UINavigationController 中覆盖向后滑动手势

[英]Overriding back swipe gesture in UINavigationController

如何覆盖手势以弹出到 rootViewController,而不是以前的 ViewController?

您可以结合以下方式执行此操作:

向您的视图控制器添加滑动手势识别器:

在此处输入图片说明

将以下内容添加到您的视图控制器类:

import UIKit

class SwipeBackViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        navigationController?.interactivePopGestureRecognizer?.isEnabled = false
    }

    @IBAction func swipeback(_ sender: UISwipeGestureRecognizer) {
        navigationController?.popToRootViewController(animated: true)
    }
}
  • viewDidLoad的命令禁用了 iOS 中的默认滑动识别器
  • 然后,与您在上面添加的滑动识别器相关联的操作会为您处理弹出窗口

我的答案在这里进入的情况下,禁用识别更详细你有任何问题。

我遵循了 CodeBender 的回答,但没有调用swipeback功能。

viewDidLoad()添加self.view.addGestureRecognizer(backswipeGestureRecognizer)后,它起作用了。

此外,您可以在 viewController 的 viewDidLoad 中设置此手势的委托。 看起来像:

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController.interactivePopGestureRecognizer?.delegate = self
}

并在视图 controller 中自定义它的方法。例如:

   func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive event: UIEvent) -> Bool {
    print("event \(event.description)")
    return true

}

如果您将返回值设置为 false - 将不会触发弹出操作

对我来说,它的工作方式如下:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive event: UIEvent) -> Bool {
    showAlertViewController()
    return false

}

如果你只需要一次这种行为,你应该在 viewController 的 deinit 方法中重新设置委托

deinit {
    navigationController?.interactivePopGestureRecognizer?.delegate = navigationController
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM