Клавиатура iPhone, кнопка «Готово» и повторный ответ - PullRequest
50 голосов
/ 13 мая 2010

Это, вероятно, глупый вопрос, но я не могу найти ответ в документации. Кнопка «Готово» на всплывающей клавиатуре всегда вызывала исчезновение клавиатуры? Я вижу много кода в Интернете, например:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    [theTextField resignFirstResponder];
    return YES;
}

Когда я нажимаю кнопку «Готово», клавиатура выскакивает и UITextField подает в отставку первый респондент.

Я предполагаю, что нажатие кнопки «Готово» раньше не вызывало от UITextField до resignFirstResponder, но это поведение изменилось через некоторое время.

Я отлаживаю на ОС 3.0 - 3.1.3

Ответы [ 5 ]

92 голосов
/ 14 мая 2010

Я сделал небольшой тестовый проект только с UITextField и этим кодом

#import <UIKit/UIKit.h>
@interface TextFieldTestViewController : UIViewController
<UITextFieldDelegate>
{
    UITextField *textField;
}
@property (nonatomic, retain) IBOutlet UITextField *textField;
@end

#import "TextFieldTestViewController.h"
@implementation TextFieldTestViewController
@synthesize textField;

- (void)viewDidLoad
{
    [self.textField setDelegate:self];
    [self.textField setReturnKeyType:UIReturnKeyDone];
    [self.textField addTarget:self
                  action:@selector(textFieldFinished:)
        forControlEvents:UIControlEventEditingDidEndOnExit];
    [super viewDidLoad];
}
- (IBAction)textFieldFinished:(id)sender
{
    // [sender resignFirstResponder];
}

- (void)dealloc {
    [super dealloc];
}
@end

Текстовое поле не изменено UITextField, перетащенное на NIB с подключенной розеткой.
После загрузки приложения нажатие в текстовом поле вызывает клавиатуру. При нажатии на кнопку «Готово» текстовое поле теряет фокус и оживляет клавиатуру. Обратите внимание, что в Интернете рекомендуется всегда использовать [sender resignFirstResponder], но это работает без него.

15 голосов
/ 02 сентября 2014

В Xcode 5.1

Кнопка «Готово»

  • В инспекторе атрибутов для UITextField в раскадровке найдите поле «Ключ возврата» и выберите «Готово»

Скрыть клавиатуру при нажатии Готово

  • В раскадровке сделать ваш ViewController делегатом для UITextField
  • Добавьте этот метод к вашему ViewController

    -(BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        [textField resignFirstResponder];
        return YES;
    }
    
6 голосов
/ 13 мая 2010

Из документации (любая версия):

Это ваше приложение ответственность распустить клавиатуру в момент вашего выбора. Вы может отклонить клавиатуру в ответ для конкретного действия пользователя, такого как пользователь нажимает определенную кнопку в ваш пользовательский интерфейс. Вы могли бы также настройте свой делегат текстового поля отклонить клавиатуру, когда пользователь нажимает кнопку возврата на сама клавиатура. Чтобы уволить клавиатура, отправьте resignFirstResponder сообщение для текстовое поле, которое в настоящее время является первым Ответчик. Это вызывает текст поле объекта для завершения текущего сеанс редактирования (с делегатом согласие объекта) и скрыть клавиатуры.

Итак, вы должны как-то отправить resignFirstResponder. Но есть вероятность, что текстовое поле теряет фокус другим способом во время обработки textFieldShouldReturn: message. Это также приведет к исчезновению клавиатуры.

2 голосов
/ 29 марта 2013

Код одной строки для кнопки «Готово»: -

[yourTextField setReturnKeyType:UIReturnKeyDone];

И добавить метод действия на valueChanged из TextField и добавить эту строку-

[yourTextField resignFirstResponder];
0 голосов
/ 13 марта 2019

Я использовал этот метод, чтобы изменить выбор текстового поля

- (BOOL)textFieldShouldReturn:(UITextField *)textField {

if ([textField isEqual:self.emailRegisterTextField]) {

    [self.usernameRegisterTextField becomeFirstResponder];

} else if ([textField isEqual:self.usernameRegisterTextField]) {

    [self.passwordRegisterTextField becomeFirstResponder];

} else {

    [textField resignFirstResponder];

    // To click button for registration when you clicking button "Done" on the keyboard
    [self createMyAccount:self.registrationButton];
}

return YES;

}

...