如何在特定HTML元素的UIWebView中触发UIMenuController?

时间:2013-11-14 11:37:30

标签: ios uiwebview uimenucontroller

我的应用程序中有UIWebView。在UIWebView内部我有一些结构化文本。当用户点击该文本的某些部分时,它将被突出显示而不被选中。那就是我使用JQuery监控触摸事件,如果用户只是短暂地点击文本,我会使用JQuery和CSS将该文本部分的背景更改为某种颜色,从而突出显示文本而不实际选择它。由于用户实际上没有选择文本,因此未显示UIMenuController。那不是我想要的情况。我想手动在突出显示的文本上显示UIMenuController。因此,当用户点击文本部分时,应该突出显示该文本,并且还应该在该抽头位置显示UIMenuController。如何在UIWebView中实际触发特定文本部分(实际上是< span> HTML元素)的UIMenuController而不选择该部分? 感谢帮助。

1 个答案:

答案 0 :(得分:0)

在网页中加载html(其中包含contenteditable as true和java脚本函数以获取所选文本的矩形(getRectForSelectedText()))...使用此方法,您将在UIWebView中获取所选文本的框架,以便我们可以使用此框架呈现UIMenuController

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *html = [NSString stringWithFormat:@"<script type=\"text/javascript\">function getRectForSelectedText() {var selection = window.getSelection(); var range = selection.getRangeAt(0); var rect = range.getBoundingClientRect(); return '{{' + rect.left + ',' + rect.top + '}, {' + rect.width + ',' + rect.height + '}}';}</script>\"<html><body><div id=\"content\" contenteditable=\"true\" style=\"font-family: Helvetica\">This is out Rich Text Editing View</div></body></html>"];
    [self.viewWeb loadHTMLString:html baseURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@",NSTemporaryDirectory()]]];
}

- (CGRect)cursorRect {
    NSString *str = [self.viewWeb stringByEvaluatingJavaScriptFromString:@"getRectForSelectedText()"];
    return CGRectFromString(str);
}