所以我将这个textField someField
绑定到InterfaceBuilder(IB)中的属性someText
。
在我的代码中的任何位置,当我更改someText
时,someField
内容会相应更新,反之亦然。
在方法-observeValueForKeyPath:ofObject:change:context:
确实我正在观察someText
,以便当文本字段中的值发生更改时,绑定会修改someText
,我可以对其执行一些验证。
发生这种情况时,我可以执行以下操作:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
[...]
//keyPath is @"someText"
if (enteredValueIsNotValid) {
[object setValue:validValue forKey:keyPath];
}
[...]
}
致电[object setValue:validValue forKey:keyPath]
后,someText
获取了值validValue
。就像预期一样。但由于招标已到位,我还希望validValue
能够显示在我的文字字段someField
中。但它不会发生!!
我显然错过了一些但却无法弄明白的东西。任何帮助将不胜感激!欢呼声。
答案 0 :(得分:2)
而不是验证-observeValueForKeyPath:ofObject:change:context:中的值,你应该这样做:
-(BOOL)validateSomeText:(id *)ioValue error:(NSError * __autoreleasing *)outError
{
...
if (enteredValueIsNotValid)
*ioValue = validValue;
return YES;
}
这应该适用于绑定(并且可以选择立即验证字段内容,即在字段“尝试作为响应者重新签名”之前),但是-setValue:forKey:不会调用它并根据文档你的二传手不应该。