Как программно ввести текст в UITextView в текущей позиции курсора

Я хотел бы добавить (некоторый предопределенный) текст в текущую позицию курсора в UITextView с помощью Swift. Итак, если у меня есть UITextField с именем txtField, в котором уже есть какой-то текст, например «это красивая долина», и я нажимаю на область между «а» и «красиво», так что курсор теперь находится в пространстве между «а». "и" красивый ", а затем нажмите кнопку в моем пользовательском интерфейсе. Строка текста, например" очень ", будет набрана в позиции курсора, так что текст в UITextView теперь станет" это очень красивая долина ". В конце этой операции (после события нажатия кнопки) я бы установил курсор сразу после слова «очень». Большое спасибо за вашу помощь. Я вижу на форуме некоторые вопросы с похожими темами, но ответы находятся в Objective C. Я самоубийца, как помощь, используя Swift.


person Faheem Ahmad    schedule 09.03.2016    source источник
comment
Что вы пробовали до сих пор?   -  person Lee    schedule 09.03.2016


Ответы (3)


Попробуйте это ... Внутри вашей кнопки IBAction используйте это (пожалуйста, не используйте принудительное необязательное развертывание), иначе, если textView не имеет выделения или курсора, приложение может аварийно завершить работу:

let txt = "whatever you want"
if let range = handleToYourTextView.selectedTextRange {
   // From your question I assume that you do not want to replace a selection, only insert some text where the cursor is.
   if range.start == range.end {
      handleToYourTextView.replaceRange(range, withText: txt)
   }
}
person Eppilo    schedule 09.03.2016
comment
Большое спасибо. Очень ценится. Это сработало отлично. - person Faheem Ahmad; 09.03.2016

попробуй это

textView.replaceRange(textView.selectedTextRange!, withText: "your text")
person techloverr    schedule 09.03.2016

Обновить:

Swift 5.2

    let txt = "whatever you want"
    if let range = myTextView.selectedTextRange {
       if range.start == range.end {
        myTextView.replace(range, withText: txt)
       }
person Steve Robertson    schedule 10.05.2020