Как Вы отклоняете клавиатуру при редактировании UITextField

180
задан TheNeil 14 May 2019 в 15:03
поделиться

6 ответов

Я установил делегата UITextField к моему ViewController класс.

В том классе я реализовал этот метод как следующее:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
}
348
ответ дан Irfan 23 November 2019 в 06:11
поделиться

kubi, спасибо. Ваш код работал. Только, чтобы быть явными (для новичков как), как Вы говорите, необходимо установить UITextField delegate, чтобы быть равными ViewController, в котором находится текстовое поле. Можно сделать это везде, где Вам нравится. Я выбрал viewDidLoad метод.

- (void)viewDidLoad 
{
    // sets the textField delegates to equal this viewController ... this allows for the keyboard to disappear after pressing done
    daTextField.delegate = self;
}
19
ответ дан Rob 23 November 2019 в 06:11
поделиться

При соединении события DidEndOnExit текстового поля к действию (IBAction) в InterfaceBuilder это будет передано, когда пользователь отклонит клавиатуру (с клавишей Return), и отправитель будет ссылкой на UITextField, который запустил событие.

, Например:

-(IBAction)userDoneEnteringText:(id)sender
{
    UITextField theField = (UITextField*)sender;
    // do whatever you want with this text field
}

Затем в InterfaceBuilder, связывают событие DidEndOnExit текстового поля к этому действию с Вашим контроллером (или независимо от того, что Вы используете для соединения событий от UI). Каждый раз, когда пользователь вводит текст и отклоняет текстовое поле, контроллер будет отправлен это сообщение.

47
ответ дан teedyay 23 November 2019 в 06:11
поделиться

Вы также можете создать метод в своем контроллере

 -(IBAction)editingEnded:(id)sender{
    [sender resignFirstResponder]; 
}

, а затем в инспекторе соединений в IB подключить к нему событие «Did End On Exit».

32
ответ дан 23 November 2019 в 06:11
поделиться

Вы заметите, что метод textFieldShouldReturn предоставляет объект текстового поля, который нажал кнопку DONE. Если вы установите TAG, вы можете включить это текстовое поле. Или вы можете отслеживать и сравнивать указатель объекта с некоторым значением члена, сохраненным его создателем.

Мой подход подобен этому для самообучения:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    NSLog(@"%s", __FUNCTION__);

    bool fDidResign = [textField resignFirstResponder];

    NSLog(@"%s: did %resign the keyboard", __FUNCTION__, fDidResign ? @"" : @"not ");

    return fDidResign;
}

Между тем, я ставлю следующий тест «подтверждения», который отрицает отставку. Это только для иллюстрации, поэтому, если пользователь вводит NO! в поле его не уволят. Поведение было таким, как я хотел, но последовательность вывода была не такой, как я ожидал.

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    NSLog(@"%s", __FUNCTION__);

    if( [[textField text] isEqualToString:@"NO!"] ) {
        NSLog(@"%@", textField.text);
        return NO;
    } else {
        return YES;
    }
}

Ниже приводится мой вывод NSLog для этого отказа, за которым следует принятие. Вы заметите, что я возвращаю результат отставки, но я ожидал, что он вернет мне ЛОЖЬ, чтобы доложить вызывающему ?! Помимо этого, он имеет необходимое поведение.

13.313 StudyKbd[109:207] -[StudyKbdViewController textFieldShouldReturn:]
13.320 StudyKbd[109:207] -[StudyKbdViewController textFieldShouldEndEditing:]
13.327 StudyKbd[109:207] NO!
13.333 StudyKbd[109:207] -[StudyKbdViewController textFieldShouldReturn:]: did resign the keyboard
59.891 StudyKbd[109:207] -[StudyKbdViewController textFieldShouldReturn:]
59.897 StudyKbd[109:207] -[StudyKbdViewController textFieldShouldEndEditing:]
59.917 StudyKbd[109:207] -[StudyKbdViewController doneEditText]: NO
59.928 StudyKbd[109:207] -[StudyKbdViewController textFieldShouldReturn:]: did resign the keyboard
2
ответ дан 23 November 2019 в 06:11
поделиться

Просто добавьте

[textField endEditing:YES];

там, где вы хотите отключить клавиатуру и отобразить представление picker.

11
ответ дан 23 November 2019 в 06:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: