Nano Hash - криптовалюты, майнинг, программирование

contenteditable div в UiWebView - новые строки не сохраняются при нажатии на кнопку "Готово"

У меня есть следующий div в UIWebView:

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

Если пользователь вставляет новую строку (используя клавишу возврата на визуальной клавиатуре), а когда он закончит, он нажимает «Готово» на серой визуальной клавиатуре «предыдущий/следующий/готово», строки объединяются в одну строку.

Как я могу этого избежать?

Во время редактированияПосле нажатия кнопки


  • поместите код для большего понимания :) спасибо :) 30.01.2013
  • Если вы добавите в html тег ввода onkeyboadDown(callfunction()), эта функция проверит введенное до сих пор значение, чтобы вы могли определить, является ли значение возвратом или любым другим символом, если это было возвращение, добавьте /n к ценность. Я не пробовал этот вариант, но попробовать стоит. 04.02.2013
  • Применяете ли вы какие-либо стили к простым элементам <div> (например, display: inline)? HTML-код, сгенерированный в вашем примере, будет San<div>Francisco</div>. 04.02.2013
  • пожалуйста, ответьте на вопрос выше? 05.02.2013
  • Нет, я не применяю стили к простому элементу 05.02.2013

Ответы:


1

Возможно, эта 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

2

Я не верю, что есть решение для этого с точки зрения Objective-C. Стандартный HTML-элемент предоставляет только одну строку. Это может быть возможно достичь с помощью некоторой магии javascript или чего-то подобного в веб-конце.

Мои навыки работы с HTML не на высоте, но если вы также контролируете этот конец, возможно, изменение на textArea может помочь?

30.01.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..