Функциональность UITextField без клавиатуры - PullRequest
20 голосов
/ 09 января 2012

Я создаю приложение с пользовательским интерфейсом для ввода текста и использовал 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, и их необходимо установитьдля редактирования.

Ответы [ 5 ]

27 голосов
/ 08 мая 2012

Решение:

В конце концов, я обнаружил еще один похожий (но не точный) вопрос здесь о stackoverflow, и один ответ дал решение моей проблемы. Для этого достаточно, чтобы приложение отображало фиктивный вид в виде клавиатуры, а все остальное работает так, как должно.

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];    
VIN.inputView = dummyView; // Hide keyboard, but show blinking cursor

Работает для UITextField и UITextView, и их нужно установить на редактируемые.

11 голосов
/ 04 февраля 2012

Код автора ...

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-контактной или к одной из zillion Bluetooth-совместимых клавиатур (или даже к использованию клавиатуры Mac с симулятором), пользователь все равно может вводить в поле БЕЗотображать всплывающее окно с отображением всплывающей клавиатуры.

Кроме того, даже если не отображается всплывающее окно с клавиатурой, пользователь по-прежнему сможет вставлять данные из области вставки в поле, дважды коснувшись поля и выбрав PASTE.

Следующий ДОПОЛНИТЕЛЬНЫЙ код запрещает использование клавиатуры и PASTE:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSLog(@"myXViewController shouldChangeCharactersInRange");
    return FALSE;
}

... и позволяет выбирать, но не редактировать текст в поле.

2 голосов
/ 09 января 2012

Сделайте его UITextView и сделайте UITextView недоступным для редактирования. Это все еще позволит копировать.

РЕДАКТИРОВАТЬ: Да, мой плохой, я забыл эту часть ... По сути, вы сделали сделать прокручиваемый ярлык.

Если вам нужны все функции без клавиатуры, вам нужно сделать ее редактируемой и отредактировать UITextFieldDelegate's -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField в return NO. Это заблокирует клавиатуру от всплытия.

1 голос
/ 25 марта 2019

В Swift 4:

let dummyView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
textInputLabel.inputView = dummyView
textInputLabel.becomeFirstResponder()
0 голосов
/ 07 марта 2013

Я использую [textfield resignFirstResponder] в методе делегата - (void)textFieldDidBeginEditing:(UITextField *)textField, например:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    if (textField == yourTextField){
      [yourTextfield resignFirstResponder];
    }
}

Так что у клавиатуры просто нет времени появляться

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