UiWebView中的contenteditable div - 单击done时不保存新行

时间:2013-01-08 20:50:31

标签: html objective-c cocoa-touch uiwebview ios6

我在UIWebView中有以下div:

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

如果用户插入新行(使用可视键盘中的返回键),并且当他完成后,他点击上一个/下一个/完成灰色视觉键盘中的完成,它将这些行组合成一行。

我该如何避免呢?

While editing After clicking done

2 个答案:

答案 0 :(得分:2)

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

更新:在网上搜索UIWebView引用后,我实际上偶然发现了one related thread on SO,其中显示了如何检索基础HTML文档中元素的innerHTML值:

//where 'wView' is your UIWebView

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

通过这种方式,您可以检索innerHTML DIV中包含的整个contenteditable字符串,该字符串在webText字符串变量中使用,并将其HTML格式的文本解析为任何适合的你的需求更好。但请注意,在按下contenteditable时,不同的浏览器格式Enter Key DIV会有所不同,有些浏览器会返回新DIV中包含的下一行,而其他浏览器可能会将其括在段落P中当和<BR> + <BR />一起用于移动到下一行时,和/或以中断shiftenter结束该行。处理输入字符串时,您必须考虑所有这些可能性。请参阅JSFiddle script I wrote使用UIWebView组件检查适用的格式。

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

干杯!

答案 1 :(得分:1)

我不相信从堆栈的Objective-c那里有解决方案。标准HTML元素仅提供单个字符串。可能有可能通过一些javascript魔术或类似的东西来实现。

我的HTML技能不是最新的,但如果你也控制了这一点,或许改成textArea可能有帮助吗?