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

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

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

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

4b9b3361

Ответ 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];
    }
}