Возможно, эта JSFiddle может пролить свет на то, что происходит в вашем приложении. Если вы введете несколько строк в верхний DIV (серый цвет фона), код HTML, который вы получите в качестве возвращаемого значения его свойства innerHTML
, сначала отобразится в поле textarea
под ним (включая форматирование HTML-тегов). Как вы скоро увидите, это не просто то, что вы ожидаете обработать в своем приложении ("строка один" + CRLF + "строка два"...), но оно также содержит элементы HTML, отделяющие одну строку от другой. Вот как браузеры могут отображать contenteditable
DIV, как если бы они были элементами управления типа «memo», анализируя их HTML (это то, что делают браузеры). Этот текст в формате HTML также является способом, которым ваше приложение получает текст, отправленный пользователем, и здесь вы должны решить, что делать с этим форматированием. Вы можете либо удалить их (что, я подозреваю, как вы устанавливаете свойство этого объекта, и оно обрабатывает это для вас), заменяя элементы HTML, такие как <DIV></DIV>
и т. д., символом пробела, либо выбирать (с помощью свойства вашего элемента управления или в code) для обработки этого форматирования любым удобным для вас способом. Однако я не знаком с UIWebView
, и вам придется самостоятельно найти, как получить полные значения в формате HTML, которые вы хотите применить к следующему отображаемому элементу DIV (или тому же, который вы назначаете новые значения до).
ОБНОВЛЕНИЕ: после поиска в Интернете ссылки UIWebView
я наткнулся на один связанный поток на SO, который показывает, как получить значение innerHTML элемента в вашем базовом HTML-документе:
//where 'wView' is your UIWebView
NSString *webText = [wView stringByEvaluatingJavaScriptFromString:@"document.getElementById('inputDIV').innerHTML"];
Таким образом, вы сможете получить всю строку innerHTML
, содержащуюся в contenteditable
DIV, которую вы используете в строковой переменной webText
, и проанализировать ее текст в формате HTML, чтобы он лучше соответствовал вашим потребностям. Однако обратите внимание, что разные браузеры по-разному форматируют contenteditable
DIV при нажатии Enter Key
, и некоторые возвращают следующую строку, заключенную в новый DIV
, в то время как другие могут заключать ее в абзац P
и/или заканчивать строку разрывом <BR>
или <BR />
, когда shift
+enter
использовались вместе для перехода к следующей строке. Вам придется учитывать все эти возможности при обработке входной строки. Обратитесь к скрипту JSFiddle, который я написал с помощью вашего компонента UIWebView
, чтобы проверить, какое форматирование применяется.
Конечно, в вашем случае может быть проще заменить contenteditable
DIV на textarea
, который будет возвращать более часто отформатированный \n
конец строки (CR+LF). Однако DIV легче проектировать, поэтому выбирайте то, что лучше соответствует вашим потребностям.
Ваше здоровье!
06.02.2013