在下面的代码中,我试图通过下一个按钮将控件从UITextField传输到下一个。
我是通过在下一个UITextField上调用becomeFirstResponder来实现的。
如果我没有在第一个和当前的UITextField中输入任何内容,则下一个按钮按预期工作。键盘保持向上并转移焦点。
如果我输入内容,并且仅当字段为空时。调用下一个字段的方法becomeFirstResponder并返回true,但键盘被解除并且焦点不会被传输。
^E
当在键盘上按下NEXT或DONE按钮时,将调用此功能。这是一个自定义数字键盘。特别是APNumberPad。 https://github.com/podkovyrin/APNumberPad 这是我的代表职能。
任何人都知道任何理由成为第一个响应者会返回真实而不起作用,仅在某些情况下,但在其他情况下工作?
是的,这是主要的UI线程。在当前字段上添加对resignFirstResponder的调用,然后延迟并调用becomeFirstResponder。这会导致键盘闪烁,无论延迟有多小。
编辑......我现在正在做这个...而且我现在正在使用键盘闪烁: 延迟是GCD的辅助函数
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()
}
答案 0 :(得分:0)
我不知道它是否对你有所帮助。我写了一个简单的UITextField扩展,其中包含一个returnView变量,该变量决定了文本字段在返回键按下时应该做什么:
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
}
}