按下“Tab”键时多次调用textFieldShouldBeginEditing

时间:2014-03-19 11:48:19

标签: ios objective-c

我有一个包含多个输入字段的表单屏幕,这些字段包含在UITableView中。如果用户连接蓝牙键盘,则可以按“Tab”键。问题是textFieldShouldBeginEditing方法为每个文本字段多次调用。这是正常行为吗?正常行为是如果某个字段处于焦点并且用户按Tab键,则光标应跳转到其他文本字段,因此textFieldShouldBeginEditing只会被调用一次(对于此文本字段)。

看起来这个问题尚未解决(post1post2)。你们是否忽略了这个问题的存在,或者找到了解决方法?

1 个答案:

答案 0 :(得分:1)

我有一个UIViewController我在那里听UITextFieldDelegate textFieldShouldBeginEditing,并且只对我的一个文本字段执行特殊操作。因此,当在蓝牙键盘上按Tab键时,会导致特殊情况发生。

今天我终于找到了解决方案:

我正在为Tab键注册keyCommand,然后让它在UIResponder上使用Category来查找firstResponder(当前textField),然后通过委托方法触发返回。

您首先需要此类别才能获得firstResponder: https://stackoverflow.com/a/21330810/747369

然后只需注册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];
    }
}