iOS webview加载html自定义选项框选词

时间:2024-01-20 21:01:15

项目要求:webview加载html网址,内容为英文文本,需要获取文本上的单词

这个是最终效果图:

iOS webview加载html自定义选项框选词

思路是先实现自定义的选项框(不带系统选项)再获取到滑选的单词;

实现的步骤:

首先是替换掉系统长按出现的复制选项框,因为长按会触发系统自带的选择复制选项(另外iOS系统在第一次长按选词时不会弹出选项框,这个注意一下就好),这里是只显示自己需要的选项(项目中是"标记"和"字典");

在视图控制器中添加UIMenuController自定义项

UIMenuItem *flag1 = [[UIMenuItem alloc] initWithTitle:@"标记" action:@selector(biaoji:)];
UIMenuItem *flag2 = [[UIMenuItem alloc] initWithTitle:@"字典" action:@selector(zidian:)];
UIMenuController *menu = [UIMenuController sharedMenuController];
[menu setMenuItems:[NSArray arrayWithObjects:flag1,flag2, nil]];

创建一个继承自webview的CustomView,作为控制器中webview的父类,初始化CustomView,添加自定义选项方法:

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{

    if(action == @selector(biaoji:) || action == @selector(zidian:)){

        return YES;

    }
// return [super canPerformAction:action withSender:sender]//加上这句会返回系统的选项
return NO;
}

注:如果返回不是NO,而是return [super canPerformAction:action withSender:sender]这个的话,选项框会带上系统的选项而把"标记"和"字典"排在后面

再在CustomView中实现UIMenuController的两个选项方法:

-(void)biaoji:(UILongPressGestureRecognizer *)gesture
{
NSLog(@"222menuView方法-标记重难点"); NSString* selection = [self stringByEvaluatingJavaScriptFromString:@"window.getSelection().toString()"];
NSLog(@"打印选中的词=%@",selection);
}
-(void)zidian:(UILongPressGestureRecognizer *)gesture
{
NSLog(@"222menuView方法-查字典");
}

[self stringByEvaluatingJavaScriptFromString:@"window.getSelection().toString()"]这个是在点击自定义选项后获取到已滑动选的词,这样就可以了,比较简单。

参考网址:

http://jingyan.baidu.com/article/ac6a9a5e7d3e282b653eac1b.html(百度知道)
www.itstrike.cn/Question/b0d4ca24-d5bd-4d12-a3be-cdeae9eba5b9.html(程序网)