UIWebView 段落选择样式

Posted

技术标签:

【中文标题】UIWebView 段落选择样式【英文标题】:UIWebView paragraph selection style 【发布时间】:2012-04-07 17:12:26 【问题描述】:

正如您在第一张图片中看到的那样,我在我的应用程序中使用 UIWebview。 但是当我将第二个手柄拖到下一个段落时,选择变成了一个矩形框,我只能选择整个段落,我怎样才能让它像第一张图片一样?

【问题讨论】:

也许您可以尝试以某种方式记住初始位置并强制替换自动绑定到段落的辅助更改。 【参考方案1】:

通过阅读Using Copy, Cut and Paste Operations,您可以看到ios 已经为您实现了UIWebViewUITextViewUITextField 的UI 选择,因此您所看到的只是选择在这些UI 对象中的工作方式。

(因此:只要用户在段落的范围内,那么用户将能够选择段落中的一部分文本,正如您在第一个视图中所展示的那样;如果用户的手指超出了段落的边缘,显示所选区域的底层 UI 代码将尝试选择它可以选择的最小项目子集,整个段落在此级别被视为一个原子单元。)

鉴于上面引用的文档仅描述了如何在从菜单调用时调用各种 剪切/复制/粘贴/选择 操作(对UIMenuController 中出现的内容有一些控制)菜单,以及对UIPasteboard 中的剪切/复制选择的一些控制),似乎没有一种方便的方法来指导 UI 如何响应控制选择边缘的用户。甚至扩展UIWebView 也可能使您能够捕获必要的触摸事件,但您将无法通过UIWebView 的文档化API 引导生成的选择图。

因此,在不使用非公共 API 的情况下,很难想象如何对选择跨段落的文本进行更精确的细粒度控制,除非您竭尽全力实现自己的类来捕获控制选择所需的触摸事件,然后处理事件以围绕您喜欢的边缘绘制选择。换句话说,你不得不重新发明UIWebView 以及它所做的一切,除了你用于跨越文本段落的选择的特殊代码。

对不起。

【讨论】:

我知道 [UITextView setContentTohtmlString:] 并且使用这种方法可以根据需要进行文本选择,但不幸的是这是私有 API。另一个技巧是为 body 节点添加 contentEditable="true",但它会显示键盘,我不知道如何避免这种情况 @anton_byrna,你还提到了 UIWebView,这似乎是使用私有 API 和 contentEditable 值来完成你想要的事情的额外障碍。 在我的项目中,我加载了自己的 html,这样我就可以毫无问题地添加 contentEditable 属性 @anton_byrna,我想我不确定你评论的重点。您是说您计划实现自己的扩展,并且由于您正在加载自己的 html,因此使用 contentEditable 属性会帮助您这样做吗?有了这么多,我会同意。如果您说使用 contentEditable 属性会以您想要的方式更改该蓝色区域的边界,而无需编写自己的扩展,那么我不知道您要去哪里。

以上是关于UIWebView 段落选择样式的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UIWebView 获取内容?

uiwebview 忽略样式标签

禁用 UIWebView 和/或 WKWebView 中样式表的加载

使用 UIWebView 创建样式文本(视网膜屏幕上模糊)

更改字体系列后,UIWebView 文本首先呈现不正确

UIWebView 中的 HTML 表格宽度