0

我知道如何使用 NSTextView 执行此操作,但 NSTextField 似乎没有提供访问NSTextStorage支持它的方法,因此我无法将自己设置为 delegate 和 process -textStorageDidProcessEditing:

我有一个NSTextField作为工作表的一部分。如果该文本字段在任何时候都是空的,则应禁用 OK 按钮,直到提供了一些输入。这基本上就是我想做的所有事情,我敢肯定有一种非常简单的方法可以做到这一点?

我试过:

[[[filenameInput cell] textStorage] setDelegate:self];

认为这NSTextFieldCell将提供文本存储(主要是因为 Xcode 友好地为我自动完成了它),然后当然,我通过委托方法进行了验证:

-(void)textStorageDidProcessEditing:(NSNotification *)notification {
    BOOL allowSubmit = ([[filenameInput stringValue] length] > 0)
        && (([relativePathSwitch state] == NSOnState) || ([[localPathInput stringValue] length] > 0));
    [createButton setEnabled:allowSubmit];
}

这会编译但会导致运行时错误,因为NSTextFieldCell不响应textStorage.

我应该在这里遵循的标准模式是什么?我想这一定是 Cocoa 开发人员的“日常”任务之一:)

工作表

4

2 回答 2

2

总是这样……我找到了。它没有在 NSTextFieldDelegate 或 NSControlTextEditingDelegate 的页面上列出,而是在 NSControl 本身的页面上列出。

委托方法是:-controlTextDidChange:.

于 2010-12-30T03:10:50.040 回答
2

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

于 2010-12-30T03:32:34.227 回答