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

问题描述 投票:0回答:1

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


TF3是特殊的,当用户点击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上。

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


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

ios uitextfield uitextfielddelegate
1个回答
1
投票

如果我理解正确的话,你想要的是下面的内容。

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)
© www.soinside.com 2019 - 2024. All rights reserved.