今天记录一下监听返回按钮及侧滑返回事件的方法。
项目中,有些特殊的需求,需要监听左上角返回按钮的触发事件,之前的遇到这种问题,本能的想到重写leftBarButtonItem,但是重写后,侧滑事件就会被禁止,即使强制开启侧滑,但是侧滑事件返回后,并没有触发我们的特殊需求。
在不重写leftBarButtonItem的前提下,基于这种特殊需求,我拦截了系统的按钮返回事件和侧滑返回事件,实现一个代理,来统一管理返回事件中,需要实现的特殊需求。而为了不侵入项目,将此协议,放在扩展汇中。在需要触发返回事件的控制器中,调用协议方法即可。
协议:
/// 导航返回协议
@objc protocol NavigationProtocol {
/// 导航将要返回方法
///
/// - Returns: true: 返回上一界面, false: 禁止返回
@objc optional func navigationShouldPopMethod() -> Bool
}
控制器扩展中,实现此协议
导航控制器中,遵守 UINavigationBarDelegate, UIGestureRecognizerDelegate, 重写
public func navigationBar(_ navigationBar: UINavigationBar, shouldPop item: UINavigationItem) -> Bool {}
重写此协议方法的目的是拦截返回按钮事件;
重写
public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {}
重写此协议方法的目的是拦截侧滑返回事件。
关于调用:
1. 使用swift开发,在ViewController中,调用navigationShouldPopMethod方法,即可进行监听
2. 使用OC开发,需要在ViewController中遵守NavigationProtocol协议,再调用navigationShouldPopMethod方法,才可以进行监听
具体实现方法,请下载 demo,密码:vh8t
有个朋友说我用百度云太low,其实我就是懒而已。。。
在这里提供下Github地址:https://github.com/linjieYang/NavigationGoBack