Swift: 如何让 UITextField 在用户未设置其文本时做出反应?

Swift: How to make UITextField react when its text isn't set by a user?

我有两个文本字段,编辑其中一个会填充另一个:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

   dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))), dispatch_get_main_queue()) {

        if textField == self.mgdlTextField {

            if let text = textField.text {
                if let value = Double(text) {
                    self.mmolTextField.text = "\(value / 38.6)"
                    return
                }
            }
            self.mmolTextField.text = ""


        } else {

            if let text = textField.text {
                if let value = Double(text) {
                    self.mgdlTextField.text = "\(value * 38.6)"
                    return
                }
            }
            self.mgdlTextField.text = ""
        }

    }

    return true
}

当我想检索自填文本字段的值时出现问题,我添加目标:

cell.mmolTextField.addTarget(self, action: "updateLDL1:", forControlEvents: UIControlEvents .EditingChanged)

上面的动作没有被调用,我想这可能是因为没有将其作为控制事件注意到的结果。 我尝试将 .EditingChanged 更改为 .AllEvents 但这不是解决方案。

你会如何处理这样的问题?也许 NSNotifications 可以派上用场?

提前致谢

尝试使用 UIControlEventValueChanged

这是针对 Obj-C 的,找到 swift 的等价物。

我相信您为 UITextField 分配了一个委托。 委托有方法 textFieldDidBeginEditing: 和 textFieldDidEndEditing: 应该在这里帮助你。无需实现其他触摸控件。

您需要自己触发事件:

self.mmolTextField.sendActionsForControlEvents(.EditingChanged)

您可以使用键值编码:

var textField: UITextField!
var observer: NSObject!

func textFieldObserverTest() {
    if textField == nil {
        textField = UITextField()
        observer = TextFieldObserver()
        textField.addObserver(observer, forKeyPath: "text", options: NSKeyValueObservingOptions.New, context: nil)
    }
    textField.text = "Hello World"
    textField.text = "Goodbye World"
    textField.text = "Its all over"
}

class TextFieldObserver : NSObject {
    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
    print("\(keyPath!) changed to \(change![NSKeyValueChangeNewKey])")
}

}