我有一个表单屏幕,其中包含 UITableView 内的多个输入字段。如果用户连接蓝牙键盘,则他可以按“Tab”键。问题是每个文本字段都会多次调用 textFieldShouldBeginEditing 方法。这是正常行为吗?正常的行为是,如果某个字段处于焦点状态并且用户按下 Tab 键,则光标应跳转到其他某个文本字段,因此 textFieldShouldBeginEditing 将仅被调用一次(对于此文本字段)。
看来这个问题没有解决(post1 https://stackoverflow.com/questions/20903817/external-keyboard-tab-event-on-ios, post2 https://stackoverflow.com/questions/9584027/textfield-becomefirstresponder-issue-for-tab-keykeyboard-action/20903730#20903730)。你们是否忽略了这个问题的存在,或者已经找到了解决方案?
我有一个UIViewController
我在哪里听UITextFieldDelegate textFieldShouldBeginEditing
并仅对我的一个文本字段执行特殊操作。因此,当在蓝牙键盘上按 Tab 时,会导致特殊情况触发。
今天终于找到解决办法了:
我正在为 Tab 键注册一个键命令,然后让它使用 UIResponder 上的类别来查找第一个响应程序(当前文本字段),然后通过委托方法触发返回。
您首先需要此类别才能获得第一个响应者:https://stackoverflow.com/a/21330810/747369 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];
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)