Вставить строку в позицию курсора UITextField - PullRequest
12 голосов
/ 23 августа 2009

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

Ответы [ 6 ]

33 голосов
/ 24 октября 2009

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

[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];
10 голосов
/ 11 января 2013

- (void)insertText:(NSString *)text

доступно в iOS 3.2 и более поздних версиях.

3 голосов
/ 21 января 2016

In Swift

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

textField.insertText("Hello")

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

2 голосов
/ 14 мая 2011

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

textField.keyboardType = UIKeyboardTypeDecimalPad;

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

1 голос
/ 23 августа 2009

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

Предполагая, что ваша точность составляет 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

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

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

0 голосов
/ 23 августа 2009

Считайте значение текстового поля в виде строки, когда нажата ваша кнопка. Отредактируйте строку, а затем установите значение поля для новой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...