【问题标题】:textFieldShouldBeginEditing called multiple times when "Tab" key is pressed按下“Tab”键时多次调用 textFieldShouldBeginEditing
【发布时间】:2014-03-19 11:48:18
【问题描述】:

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

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

【问题讨论】:

  • 您能否发布以下输出: - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { NSLog(@"Textfield: %@",textField); }
  • @SebastianBorggrewe 它将打印不同的 textField 对象,因此每个不同的文本字段都会调用它。已经这样做了。
  • 检查:link 的指针
  • 这是答案:stackoverflow.com/questions/9584027/… 使用 textFieldDidBeginEditing

标签: ios objective-c


【解决方案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];
    }
}

【讨论】:

  • 我最近发现使用 Shift+Tab 时这不起作用。这将需要另一个具有适当修饰符Flags 的 KeyCommand。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多