клавиатура iPhone, кнопка Done и resignFirstResponder

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

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

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

Я предполагаю, что нажатие кнопки "Done" не сделало используемый для порождения a UITextField кому: resignFirstResponder, но то поведение, измененное в некоторое время.

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

50
задан Max Desiatov 13 March 2013 в 08:27
поделиться

2 ответа

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

92
ответ дан 7 November 2019 в 10:43
поделиться

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

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

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

6
ответ дан 7 November 2019 в 10:43
поделиться