Заставьте 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