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