我有两个文本域,编辑其中一个会导致填充另一个:
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可能会派上用场?
提前致谢
答案 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。