如何处理 iOS 中的 Tab 键按下?

How to handle Tab key press in iOS?

我有一个 UIViewController,它有 3 个三个 UITextFields - TF1、TF2 和 TF3。当应用程序在 iOS 模拟器上 运行 并且我按 Tab 键时,焦点会按预期移动到下一个文本字段。


TF3很特别。当用户点击 TF3 时,文本字段不应获得焦点,而是必须在屏幕上显示一个新视图。我已经实现了 UITextFieldDelegate 方法 textFieldShouldBeginEditing(_:) 来解决这个问题,如下所示-

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    if (textField == TF3) {
        // show new view
        return false
    }
    return true
}

这按预期工作。


添加以上代码后,只要按下Tab键,就会显示新视图。这是因为每当按下 Tab 键时,屏幕上的所有文本字段都会调用 textFieldShouldBeginEditing(_:)

认为TF1目前是第一响应者

如果我按 Tab 键,它会按预期将焦点移动到 TF2。但是,也会显示新视图,因为在 TF3 上调用了 textFieldShouldBeginEditing(_:)


谁能指出如何解决这个问题?

如果我没理解错的话,你想要的是:

计划A

var isTF3Beginned = false // a property of current view controller as flag

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    if (textField == TF3 && isTF3Beginned == true) {
        // show new view
        return false
    }
    isTF3Beginned = true
    return true
}

计划 B RxSwift

TF3.rx
.controlEvent(.editingDidBegin)
.skip(1)
.subscribe(onNext: { () in
    // show new view
}).disposed(by: disposeBag)