Составляю UITextField
что есть UIPickerView
как inputView
. Все хорошо, за исключением того, что я могу редактировать, копируя, вставляя, вырезая и выделяя текст, а мне это не нужно. Только средство выбора должно изменять текстовое поле.
Я узнал , что я могу отключить редактирование путем установки setEnabled
или setUserInteractionEnabled
к NO
. Хорошо, но TextField перестает реагировать на прикосновения, и средство выбора не появляется.
Что я могу сделать для этого?
ios
uitextfield
uipickerview
Луис де Пра
источник
источник
Переведите ответ Ника на быстрый:
P / S: Return false => текстовые поля не могут вводиться, редактировать с клавиатуры. Он просто может установить текст по коду. EX: textField.text = "Моя строка здесь"
источник
Это было бы проще всего:
in viewDidLoad: (установите делегата только для текстовых полей, которые нельзя редактировать.
и вставьте эту функцию делегата:
Это оно!
источник
UIPickerView
поведение из этого метода делегата, оно работает хорошо.В быстром 3+:
источник
Было бы более элегантно создать собственный подкласс,
UITextField
который возвращаетNO
для всех вызововcanPerformAction:withSender:
(или, по крайней мере, гдеaction
есть@selector(cut)
или@selector(paste)
), как описано здесь .Кроме того, я бы также реализовал строку - (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) range replaceString: (NSString *) в соответствии с предложением Ника, чтобы отключить ввод текста с клавиатуры Bluetooth.
источник
canPerformAction
иshouldChangeCharactersInRange
методы никогда не вызываются.Просто поместите UIButton точно по всему UITextField без текста метки, который сделает его «невидимым». Эта кнопка может принимать и делегировать касания вместо текстового поля, при этом содержимое текстового поля все еще отображается.
источник
В Swift:
источник
Я использовал решение, предоставленное MrMage. Единственное, что я бы добавил, это то, что вы должны отказаться от UITextView как первого респондента, иначе вы застрянете с выделенным текстом.
Вот мой быстрый код:
источник
В качестве альтернативы, которая обрабатывает UIPickerView и листы действий, проверьте ActionSheetPicker
https://github.com/TimCinel/ActionSheetPicker
Включены коконады. Он обрабатывает все кнопки отмены и завершения на листе действий. Примеры в образце проекта великолепны. Я выбираю ActionSheetStringPicker, который легко обрабатывает только параметры на основе String, но API может обрабатывать почти все, что я могу придумать.
Первоначально я начал решение, очень похожее на отмеченный галочкой ответ, но наткнулся на этот проект, и мне потребовалось примерно 20 минут, чтобы интегрировать в свое приложение все, включая использование кокоподов: ActionSheetPicker (~> 0.0)
Надеюсь это поможет.
Загрузите проект git и посмотрите следующие классы:
Вот примерно большая часть кода, который я добавил, плюс импорт * .h.
источник
Чтобы предотвратить редактирование UITextField при использовании UIPickerView для выбора значений (в Swift):
источник
Этот обходной путь работает. Поместите прозрачный UIView над текстовым полем и реализуйте следующий код:
источник
Сделайте ваш inputView представленным скрытым текстовым полем, которое также изменяет текст представленного и отключенного.
источник
Не совсем уверен, насколько это круто, но единственное, что помогло в моем случае, - это добавление целевого действия и вызов endEditing. Поскольку мое средство выбора контролирует мое значение UITextField.text, я могу закрыть клавиатуру, как только пользователь щелкнет поле. Вот код:
источник
Я использовал :
и его работа отлично
источник
Это сработало для меня
[textview setEditable:NO];
. Вышеупомянутые ответы слишком усложняют ситуацию.источник