Подтвердить что ты не робот

Вставить строку в позицию курсора UITextField

У меня есть UITextFields в UITableView. Пользователь должен иметь возможность вставлять только числа и точки. Для этого я установил тип клавиатуры в UIKeyboardTypeNumberPad и добавил кнопку "." В левом нижнем углу. При каждом нажатии кнопки вызывается функция. Эта функция должна вставить точку в текущую позицию курсора, но это проблема: UITextField не имеет свойства selectedRange, поэтому я не могу получить текущую позицию курсора. Кто-нибудь знает, как решить эту проблему, или есть ли другой способ сделать это? Спасибо.

4b9b3361

Ответ 1

Наконец-то я нашел решение этой проблемы! Вы можете поместить текст, который вам нужно вставить в системный картон, а затем вставить его в текущую позицию курсора:

[myTextField paste:self]  

Я нашел решение в этом человеческом блоге:
http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html

Функциональность пасты зависит от ОС V3.0, но я ее протестировал, и она отлично подходит для меня с пользовательской клавиатурой.

Обновление: В соответствии с приведенным ниже комментарием Jasarien, рекомендуется сначала сохранить содержимое картона и восстановить его позже. Для удобства, вот мой код:

  // Get a reference to the system pasteboard
  UIPasteboard* lPasteBoard = [UIPasteboard generalPasteboard];

  // Save the current pasteboard contents so we can restore them later
  NSArray* lPasteBoardItems = [lPasteBoard.items copy];

  // Update the system pasteboard with my string
  lPasteBoard.string = @"-";

  // Paste the pasteboard contents at current cursor location
  [myUIField paste:self];

  // Restore original pasteboard contents
  lPasteBoard.items = lPasteBoardItems;

  [lPasteBoardItems release];

Ответ 3

В настоящее время есть фантастическая клавиатура с числовой клавиатурой, которая содержит десятичную точку, без необходимости настройки, кроме настройки (а не в IB, а еще нет опции) для свойства UITextField keyboardType для UIKeyboardStyleDecimalPad, например:

textField.keyboardType = UIKeyboardTypeDecimalPad;

Это делает все фантазии, которые вы пытались сделать автоматически.

Ответ 4

В Swift

Вставляет текст в текущую позицию курсора.

textField.insertText("Hello")

Мой полный ответ о работе с позицией курсора здесь.

Ответ 5

Если вы хотите создать текстовые поля, которые позволяют вводить десятичные знаки, я могу предложить вам скорее исправить десятичную точку с определенной точностью и позволить пользователю вводить числа следующим образом:

Предполагая, что ваша точность равна 2 десятичным точкам:

start: value is 0.00
user enters 1: value is 0.01
user enters 2: value is 0.12
user enters 3: value is 1.23
user enters 4: value is 12.34

См. Каков наилучший способ ввода числовых значений с десятичными точками? для аналогичного решения для валюты.

Это гораздо более простое решение, чем создание пользовательской клавиатуры и решение всех нюансов, которые представляет этот подход. Если, однако, вам нужна точность переменной длины, тогда этот подход может вам лучше подойти.

Ответ 6

Прочитайте значение текстового поля в виде строки при нажатии кнопки. Измените строку, а затем установите значение поля в новую строку.