TextFieldShouldBeginEditing вызывается несколько раз при нажатии клавиши "Tab"

У меня есть экран формы с несколькими полями ввода, которые содержатся внутри UITableView. Если пользователь подключается к клавиатуре Bluetooth, он может нажать клавишу "Tab". Проблема с этим - метод textFieldShouldBeginEditing вызывается несколько раз для каждого текстового поля. Это нормальное поведение? Обычное поведение было бы, если какое-либо поле находится в фокусе, и пользователь нажимает вкладку, тогда курсор должен перейти в другое текстовое поле, и поэтому textFieldShouldBeginEditing будет вызываться только один раз (для этого текстового поля).

Похоже, эта проблема не решена (post1, post2). Вы, ребята, игнорируете наличие этой проблемы или нашли исправление для этого?

Ответ 1

У меня есть UIViewController, где я слушаю UITextFieldDelegate textFieldShouldBeginEditing и имею специальное действие только для одного из моих текстовых полей. Поэтому, когда вы нажимаете Tab на клавиатуре bluetooth, вы вызываете особый случай.

Сегодня я наконец нашел asolution:

Я регистрирую keyCommand для ключа Tab, а затем использую категорию в UIResponder, чтобы найти firstResponder (текущий textField), а затем активировать возврат через метод делегата.

Сначала вам понадобится эта категория, чтобы получить firstResponder: fooobar.com/info/17897/...

Затем просто зарегистрируйте keyCommand и получите текущий firstResponder.

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self addKeyCommand:[UIKeyCommand keyCommandWithInput:@"\t" modifierFlags:0 action:@selector(tabKeyPressed:)]];
}

- (void)tabKeyPressed:(UIKeyCommand *)sender
{
    id firstResponder = [UIResponder currentFirstResponder];
    if ([firstResponder isKindOfClass:[UITextField class]])
    {
        UITextField *textField = (UITextField *)firstResponder;
        // Call the delegate method or whatever you need
        [self textFieldShouldReturn:textField];
    }
}