Функциональность UITextField без клавиатуры
Я создаю приложение с настраиваемым интерфейсом для ввода текста и использую UILabel для отображения. Затем стало необходимо, чтобы пользователь мог копировать и вставлять текст, поэтому я пошел с UITextField.
Проблема заключается в том, что я не могу понять, как заставить UITextField разрешить выбор, копирование, вставку и т.д., но при выборе поля не отображается клавиатура.
Я читал множество сообщений, похожих на это, но никто не спрашивает точно то же самое, и ни одно из решений не работает для меня. Я попытался сделать поле не редактируемым, что блокирует клавиатуру, но также не позволяет копировать и вставлять. Я также читал комментарии, предлагая подклассифицировать UITextField, но ни один из них не прочитал конкретные примеры.
Можно ли сделать что-то просто, или мне нужно идти по пути создания пользовательского представления для клавиатуры или других параметров?
Спасибо,
Эндрю
Решение:
В конце концов, я обнаружил еще один подобный (но не точный) вопрос здесь о stackoverflow, и один ответ дал решение моей проблемы. Путь к этому - просто показать, что приложение отображает манекен в виде клавиатуры, а все остальное работает так, как должно быть.
UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor
Он работает для UITextField и UITextView, и они должны быть доступны для редактирования.
Ответы
Ответ 1
Решение:
В конце концов, я обнаружил еще один подобный (но не точный) вопрос здесь о stackoverflow, и один ответ дал решение моей проблемы. Путь к этому - просто показать, что приложение отображает манекен в виде клавиатуры, а все остальное работает так, как должно быть.
UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor
Он работает для UITextField
и UITextView
, и их нужно настроить на редактируемые.
Ответ 2
Код автора...
UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor
(где "VIN" - это переменная UITextField, и этот код помещается где-то вроде viewDidLoad)
... работает, чтобы предотвратить отображение всплывающей клавиатуры iPhone/iPad.
ОДНАКО, это просто "дисплейная" часть интерфейса клавиатуры. Если у вас есть внешняя клавиатура, например, физическая клавиатура Apple iPhone/iPad, которая подключается к 30-контактной или одной из двух клавиатур с поддержкой Bluetooth (или даже с клавиатурой Mac с симулятором), пользователь все равно может ввести в поле БЕЗ отображение всплывающей подсказки клавиатуры.
Кроме того, даже при отсутствии всплывающего окна клавиатуры пользователь все равно сможет вставить PASTE из палитры в поле, дважды коснувшись поля и выбрав PASTE.
Следующий ДОПОЛНИТЕЛЬНЫЙ код запрещает использование этой клавиатуры и предотвращает также PASTE:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSLog(@"myXViewController shouldChangeCharactersInRange");
return FALSE;
}
... и по-прежнему позволяет выбирать, но не редактировать текст в поле.
Ответ 3
Сделайте UITextView и сделайте UITextView недоступным для редактирования. Это все равно позволит копировать.
EDIT: Да, я плохой, я забыл эту часть... В основном то, что вы сделали, это сделать прокручиваемую метку.
Если вам нужна вся функциональность без клавиатуры, вам нужно сделать ее доступной для редактирования и отредактировать UITextFieldDelegate -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
до return NO
. Это заблокирует клавиатуру.
Ответ 4
Я использую [textfield resignFirstResponder]
в методе делегата - (void)textFieldDidBeginEditing:(UITextField *)textField
следующим образом:
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
if (textField == yourTextField){
[yourTextfield resignFirstResponder];
}
}
У клавиатуры просто нет времени для отображения