如何处理 iOS 中的 Tab 键按下?
How to handle Tab key press in iOS?
我有一个 UIViewController
,它有 3 个三个 UITextField
s - 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)
我有一个 UIViewController
,它有 3 个三个 UITextField
s - 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)