我的应用程序中有一个 NSTextField
,当用户给我一些错误的输入时,我想更新输入。
此外,我已将此文本字段控件的值绑定(bind)到成员变量。我提取了一个最小的项目:
这是绑定(bind):
一切都很简单,最后在代码中我将初始值设置为 Hello, World
,并且我还实现了 中的
。controlTextDidChange:
方法NSControlTextEditingDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
self.text = @"Hello, World";
}
- (void)controlTextDidChange:(NSNotification *)obj
{
NSLog(@"Changed Value: %@", [[obj object] stringValue]);
self.text = @"What??";
}
当我开始在文本字段中输入内容时,我确实收到了更改通知,但文本字段中的值未更新。我想知道为什么以及如何通过更改 self.text
来更新文本字段中的文本值。
PS:我知道我可以通过添加该文本字段的 outlet
并手动设置 stringValue
来实现此目的,但我不想这样做。因为它打破了低耦合
规则,对吗?
最佳答案
为了使绑定(bind)自动验证值,有Key-Value Validation机制.
在您绑定(bind)到的对象(应用程序委托(delegate))中实现以下方法之一:
- (BOOL) validateValue:(inout id *)ioValue forKey:(NSString *)inKey error:(out NSError **)outError; - (BOOL) validateText:(inout id *)ioValue error:(out NSError **)outError;
第一个是通用的,将被所有键调用,第二个将专门为键
text
调用。启用“立即验证”复选框。
如果验证方法返回NO
,将显示一个标准错误表,其中包含将值恢复到编辑前的值的选项,以及继续编辑而不在模型对象中设置值的选项(应用程序代理)。
关于objective-c - NSTextField - 使用 KVO 输入验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24647596/