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

时间:2015-11-17 16:03:09

标签: ios swift uitextfield

我有两个文本域,编辑其中一个会导致填充另一个:

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可能会派上用场?

提前致谢

4 个答案:

答案 0 :(得分:2)

您需要自己触发事件:

self.mmolTextField.sendActionsForControlEvents(.EditingChanged)

答案 1 :(得分:0)

我相信你已经为你的UITextField分配了一名代表。 委托有方法textFieldDidBeginEditing:和textFieldDidEndEditing:这应该对你有所帮助。无需实施其他触控。

答案 2 :(得分:0)

您可以使用键值编码:

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])")
}

}

答案 3 :(得分:-1)

尝试使用UIControlEventValueChanged

这是为Obj-C找到等效的swift。