![](/img/trans.png)
[英]How to disable back swipe gesture in UINavigationController on iOS 7
[英]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.