cocoa - 验证用户界面 (NSButton) 作为 NSTextField 中的用户类型

标签 cocoa macos nstextfield

我知道如何使用 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 开发人员的“日常”任务之一:)

The Sheet

最佳答案

这就是 NSFormatter 的用途;创建 NSFormatter 的子类并将其实例设置为 NSTextField 的格式化程序,并让它验证用户输入的文本。

关于cocoa - 验证用户界面 (NSButton) 作为 NSTextField 中的用户类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4559698/

相关文章:

c++ - Mac OS X Lion 没有/Developer/usr 文件夹

objective-c - 在结束编辑时执行操作

objective-c - 将 NSNumberFormatter 连接到 NSTextfield

ios - 如何在Cocoa App中执行.sh文件

objective-c - 是否可以与 iWork 进行一些互操作?

objective-c - 如何让我的 View 固定在窗口的右侧?

objective-c - 为什么 [NSTextStorage setAttributedString] 与 NSMutableAttributedString 崩溃?

swift - 找不到“iTunesLibrary/ITLibDefines.h”文件

macos - 如何处理 OS X 10.9 和 10.10 之间的系统字体更改

cocoa - 文本字段渲染