在下面的代码中,我试图通过下一个按钮将控制权从 UITextField 转移到下一个。
我通过在下一个 UITextField 上调用 becomeFirstResponder 来完成此操作。
如果我没有在第一个和当前的 UITextField 中键入任何内容,下一个按钮将按预期工作。键盘保持向上,焦点转移。
如果我确实输入了一些东西,并且只有当字段为空时。调用下一个字段的方法 becomeFirstResponder 并返回 true,但键盘被关闭且焦点未转移。
public func numberPad(numberPad: APNumberPad, functionButtonAction:UIButton, textInput: UIResponder) {
var current:UITextField?
for field in editCells {
if (current != nil) {
field.valueTextField.becomeFirstResponder()
return;
}
if (field.valueTextField == activeField) {
current = field.valueTextField
}
}
textInput.resignFirstResponder()
}
当按下键盘上的 NEXT 或 DONE 按钮时调用此函数。这是一个自定义数字键盘。特别是 APNumberPad。 https://github.com/podkovyrin/APNumberPad 这是我的委托(delegate)功能。
任何人都知道 becomeFirstResponder 会返回 true 而不起作用的任何原因,仅在某些情况下,但在其他情况下起作用?
是的,这是主 UI 线程。在当前字段上添加对 resignFirstResponder 的调用,然后延迟并调用 becomeFirstResponder 起作用。这会导致键盘闪烁,无论延迟有多小。
编辑……我现在正在做这件事……并且暂时忍受键盘闪烁: Delay是GCD的辅助函数
public func numberPad(numberPad: APNumberPad, functionButtonAction:UIButton, textInput: UIResponder) {
var current:UITextField?
for field in editCells {
if (current != nil) {
current?.resignFirstResponder()
delay (0) {
field.valueTextField.becomeFirstResponder()
}
return;
}
if (field.valueTextField == activeField) {
current = field.valueTextField
}
}
textInput.resignFirstResponder()
}
最佳答案
不知道对你有没有帮助。我写了一个简单的 UITextField 扩展,其中包含一个 returnView 变量,它决定文本字段在返回键按下时应该做什么:
- 转到下一个文本字段(如果 returnView 是一个 UITextField)
- 模拟按钮触摸(如果 returnView 是一个 UIButton)
- 或隐藏键盘
class NextTextField: UITextField, UITextFieldDelegate {
@IBOutlet weak var returnView: UIView? {
didSet {
if returnView is UITextField {
returnKeyType = UIReturnKeyType.Next
}
}
}
override func awakeFromNib() {
super.awakeFromNib()
delegate = self
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
if let nextTextField = self.returnView as? UITextField {
nextTextField.becomeFirstResponder()
} else if let nextButton = self.returnView as? UIButton {
nextButton.sendActionsForControlEvents(.TouchUpInside)
} else {
self.resignFirstResponder()
}
return true
}
}
关于ios - becomeFirstResponder 返回 true 并且键盘被关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33356744/