项目要求: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(程序网)