我知道如何使用 NSTextView 执行此操作,但 NSTextField 似乎没有提供访问支持它的 NSTextStorage
的方法,因此我无法将自己设置为委托(delegate)和进程-textStorageDidProcessEditing:
。
我有一个 NSTextField
作为工作表的一部分。如果该文本字段在任何时候都是空的,则应禁用“确定”按钮,直到提供一些输入为止。这基本上就是我想要做的,并且我确信有一种非常简单的方法可以做到这一点?
我尝试过:
[[[filenameInput cell] textStorage] setDelegate:self];
认为 NSTextFieldCell
将提供文本存储(主要是因为 Xcode 善意地为我自动完成了它),然后当然,通过委托(delegate)方法进行了验证:
-(void)textStorageDidProcessEditing:(NSNotification *)notification {
BOOL allowSubmit = ([[filenameInput stringValue] length] > 0)
&& (([relativePathSwitch state] == NSOnState) || ([[localPathInput stringValue] length] > 0));
[createButton setEnabled:allowSubmit];
}
这可以编译,但会导致运行时错误,因为 NSTextFieldCell
不响应 textStorage
。
我应该遵循什么标准模式?我想这一定是 Cocoa 开发人员的“日常”任务之一:)
最佳答案
这就是 NSFormatter 的用途;创建 NSFormatter 的子类并将其实例设置为 NSTextField 的格式化程序,并让它验证用户输入的文本。
关于cocoa - 验证用户界面 (NSButton) 作为 NSTextField 中的用户类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4559698/