【问题标题】:How to trigger UIMenuController in UIWebView on specific HTML element?如何在特定 HTML 元素的 UIWebView 中触发 UIMenuController?
【发布时间】:2013-11-27 09:42:08
【问题描述】:

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

【问题讨论】:

  • 嗨,我需要完全相同的东西。你能最后和我分享一下你的解决方案吗?

标签: ios uiwebview uimenucontroller


【解决方案1】:

在网页中加载 html(其中包含 contenteditable 为 true 和 java 脚本函数以获取所选文本的矩形 (getRectForSelectedText()))...B 使用此方法,您将在 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);
}

【讨论】:

  • 正如我所写的,我实际上并没有选择文本。也就是说,我没有按住并且不会出现图钉(您可以更改选择的图钉),我只是更改给定 HTML 跨度的属性。那就是我需要得到那个跨度的矩形。这可能吗?
猜你喜欢
  • 2018-02-11
  • 1970-01-01
  • 2014-07-02
  • 2018-06-17
  • 2019-03-04
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 2021-01-01
相关资源
最近更新 更多