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

IPhone-клавиатура, кнопка "Готово" и "ResignFirstResponder"

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

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

Когда я нажимаю кнопку "Готово" , клавиатура выскакивает вниз, а UITextField уходит в отставку с первого ответчика.

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

Я отлаживаю OS 3.0 - 3.1.3

4b9b3361

Ответ 1

Я сделал небольшой тестовый проект с помощью только 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], но это работает без него.

Ответ 2

В Xcode 5.1

Включить кнопку "Готово"

  • В Attributes Inspector для UITextField в Storyboard найдите поле "Return Key" и выберите "Done"

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

  • В Storyboard сделайте свой ViewController делегатом для UITextField
  • Добавьте этот метод в свой ViewController

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

Ответ 3

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

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

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

Ответ 4

Один код строки для кнопки "Готово": -

[yourTextField setReturnKeyType:UIReturnKeyDone];

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

[yourTextField resignFirstResponder];