5

我有以下 div UIWebView

<div contenteditable="true"></div>

如果用户插入新行(使用可视键盘中的回车键),并且当他完成时他在上一个/下一个/完成的灰色可视键盘中单击完成,它将这些行合并为一行。

我怎样才能避免它?

编辑时 点击完成后

4

2 回答 2

2

也许这个 JSFiddle可以揭示您的应用程序中正在发生的事情。如果您在顶部的 DIV(灰色背景颜色)中键入一些行,则作为其innerHTML属性的返回值获得的 HTML 代码将首先显示在其textarea下方的字段中(包括 HTML 标记格式)。正如您很快就会看到的,它不仅仅是您希望在应用程序中处理的内容('line one' + CRLF + 'line two'...),而且它还包含将行与行分隔开的 HTML 元素。这就是浏览器能够显示的方式contenteditableDIV 就好像它们是“备忘录”类型的控件——通过解析它们的 HTML(这就是浏览器所做的)。这种 HTML 格式的文本也是您的应用程序接收用户提交的文本的方式,您必须决定如何处理这种格式。您可以将它们剥离(我怀疑这是您如何设置该对象的属性,它会为您处理)用<DIV></DIV>空格字符替换 HTML 元素等,或者选择(使用您的控件的属性,或在代码中) 以您希望处理的任何方式处理此格式。不过我不熟悉UIWebView,您必须自己找到如何检索完整的 HTML 格式的值,这些值要应用于您正在显示的下一个 DIV 元素(或您正在分配新的相同的元素)值)。

更新:在网上搜索UIWebView参考后,我实际上偶然发现了 SO 上的一个相关线程,该线程显示了如何检索基础 HTML 文档中元素的 innerHTML 值:

//where 'wView' is your UIWebView

NSString *webText = [wView stringByEvaluatingJavaScriptFromString:@"document.getElementById('inputDIV').innerHTML"];

这样,您就可以检索innerHTML包含在contenteditable您在字符串变量中使用的 DIV 中的整个字符串,webText并将其 HTML 格式的文本解析为更适合您需要的任何内容。但请注意,不同的浏览器在按下contenteditable时会以不同的方式格式化 DIV Enter Key,有些浏览器会返回包含在 new 中的下一行DIV,而另一些浏览器可能会将其包含在段落中P和/或用 break<BR><BR />, 当一起使用shift+移动到时结束行enter下一行。在处理输入字符串时,您必须考虑所有这些可能性。请参阅我使用您的组件编写的 JSFiddle 脚本UIWebView以检查适用的格式。

当然,在您的情况下,将您的contenteditableDIV 替换为textarea将返回更常用格式\n的行尾 (CR+LF) 可能会更简单。然而,DIV 更容易设计,因此请选择更适合您需求的。

干杯!

于 2013-02-06T04:50:30.413 回答
1

我不相信堆栈的objective-c方面有解决方案。标准的 HTML- 元素只提供一个字符串。有可能通过一些 javascript 魔术或类似的东西在 web 端实现。

我的 HTML 技能还没有达到标准,但如果你也控制了这一点,也许将其更改为 textArea 可能会有所帮助?

于 2013-01-30T17:40:08.023 回答