becomeFirstResponder返回true并且键盘被解除

时间:2015-10-26 22:28:20

标签: ios swift

在下面的代码中,我试图通过下一个按钮将控件从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()


}

1 个答案:

答案 0 :(得分:0)

我不知道它是否对你有所帮助。我写了一个简单的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
    }

}