2010-05-19 8 views
4

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

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

Я установил как ячейку, так и схему, чтобы быть «непрерывной».

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

ответ

7

Отвечая на мой вопрос, потому что я нашел решение. Существует необязательный метод переопределения на 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