前言
有个需求,在控制器打开一个H5
界面,H5
界面可能内部多次跳转,如果开启allowsBackForwardNavigationGestures=yes
左滑可以返回上一层级的H5。但是在滑动返回上一级时候要做个弹窗,来判断是否保留信息,然后在执行滑动。(导航栏按钮返回没问题,现在就是滑动返回存在问题)
- 分析
WKWebView
有个属性canGoBack
为YES
就是可以左滑,为NO表示为第一级。
问题解决
通过重新goBack
方法,发现并没有什么作用。
-
禁用导航栏左滑和WKWebView左滑,在UIWindow添加View,在添加手势,效果不太好。
-
通过
UIPanGestureRecognizer
设置target为self.navigationController.interactivePopGestureRecognizer.delegate
,并将Action
设置为空。监听UIPanGestureRecognizer
手势的代理。
id target = self.navigationController.interactivePopGestureRecognizer.delegate;
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:nil];
pan.delegate = self;
[self.view addGestureRecognizer:pan];
监听代理:
当为
canGoBack
为YES事件交给H5开发管理
为NO,自己来管理事件。
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if (self.webView.canGoBack){
if (![isnull(self.onBackeventName) isEqualToString:@""])
[self sendNativeCommonMessage:MTWebApponBackEvent
params:@{@"name":self.onBackeventName}
requestCode:@""
responseCode:@""];
}else{
[self.navigationController popViewControllerAnimated:YES];
}
return YES;
}
网友评论