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

Функциональность 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, и они должны быть доступны для редактирования.

4b9b3361

Ответ 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];
    }
}

У клавиатуры просто нет времени для отображения