Заставьте NSFormatter постоянно проверять NSTextFieldCell

В Какао у меня есть NSOutlineView, где ячейки - NSTextFieldCell. В ячейке отображаются значения, которые представляют собой строки, отформатированные в соответствии с определенными правилами (например, числа с плавающей запятой или пары чисел с пробелом между ними). Я сделал собственный NSFormatter для проверки текста, и это, кажется, работает без проблем.

Однако, ячейка (или представление схемы, я не уверен, что вызывает это), кажется, только использует форматер в тот момент, когда мое редактирование закончится. Если я введу несколько буквенных символов в текстовое поле (что нарушает правила форматирования), эти символы появятся - единственный способ, которым я замечаю, что форматировщик выполняет свою работу, - это то, что мне теперь запрещено перемещать фокус клавиатуры от этой ячейки. Если я верну содержимое ячейки в правильную форму, то смогу убрать фокус.

Я установил как ячейку, так и контурный вид как "непрерывный".

Было бы лучше, если бы я не смог ввести текст в ячейку. Можно ли сделать так, и если да, то как?

1 ответ

Решение

Отвечая на мой собственный вопрос, потому что я нашел решение. Существует необязательный метод для переопределения NSFormatterи это решает проблему. Необязательный метод:

- (BOOL) isPartialStringValid: (NSString*) partialString
             newEditingString: (NSString**) newString
             errorDescription: (NSString**) error

Здесь можно просто вернуться NO если partialString является недействительным. Можно вернуть фиксированную строку по ссылке в newString если хочешь.

Есть еще один метод, который также можно было бы использовать, но он более сложный:

- (BOOL) isPartialStringValid: (NSString**) partialStringPtr
        proposedSelectedRange: (NSRangePointer) proposedSelRangePtr
               originalString: (NSString*) origString
        originalSelectedRange: (NSRange) origSelRange
             errorDescription: (NSString**) error
Другие вопросы по тегам