Проверьте пользовательский интерфейс (NSButton) как пользовательский тип в NSTextField - PullRequest
0 голосов
/ 30 декабря 2010

Я знаю, как мне это сделать с NSTextView, но NSTextField, по-видимому, не обеспечивает способ доступа к NSTextStorage его поддержке, поэтому я не могу установить себя в качестве делегата и обработать -textStorageDidProcessEditing:.

У меня есть NSTextField как часть листа.Если это текстовое поле является emtpy в любой момент, кнопка 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:)

The Sheet

Ответы [ 2 ]

2 голосов
/ 30 декабря 2010

Это то, для чего предназначен NSFormatter;создайте подкласс NSFormatter и установите его экземпляр как ваш форматировщик NSTextField, и позвольте ему проверять текст, который вводит пользователь.

2 голосов
/ 30 декабря 2010

Всегда так ... Я нашел это. Он не указан на странице для NSTextFieldDelegate или NSControlTextEditingDelegate, но на странице самого NSControl.

Метод делегата: -controlTextDidChange:.

...