iOS开发app时,与浏览器交互,点击WKwebView,操作UI组件,由于使用js操作比较麻烦(容易出错,且耗时长,不一定能达到预期效果),现在使用添加一个新类继承WKwebView,给新类添加点击操作,再将事件传递给WKwebView,从而实现WKwebView的点击事件。具体操作如下:
- 创建一个新类touchView,继承WKwebView
- 在touchView中添加hitTest触发点击事件
- 事件传递
创建一个新类touchView,继承WKwebView
@interface touchView : WKWebView
@end
在.m文件使用hitTest实现点击事件
@implementation touchView
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
UIView *hitView = [super hitTest:point withEvent:event];
if(hitView){
//实现事件传递,将此事件抛出,在引用此文件的.m文件中接收
[[NSNotificationCenter defaultCenter] postNotificationName:@"touchEvent" object:nil];
}
return hitView;
}
@end
在有WKWebView组件的viewController中接收touchView中传递的事件
- 导入touchView
- 在viewDidLoad中接收事件(NSNotificationCenter)
- 实现效果
#import "touchView.h"
- (void)viewDidLoad {
[super viewDidLoad];
//接收传递过来的事件
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onPageClick) name:@"touchEvent" object:nil];
}
//实现点击效果
-(void) onPageClick{
//在这里添加点击后需要操作的代码
}
总结: 在两个不同的页面需要传递事件,分3步,
- 添加 [[NSNotificationCenter defaultCenter] postNotificationName:@"touchEvent" object:nil]; 抛出事件
- 接收事件的页面导入 抛出事件页面
- 接收事件 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onPageClick) name:@"touchEvent" object:nil];