2010-08-31 2 views
0

Прежде всего, я должен сделать это без IB и без использования продвинутых методов Objective-C, таких как KVO.Подтвердить десятичные значения max/min в NSTextField

Моя проблема связана с простым фактом, что я не могу найти способ получить все новое строковое значение текстового поля.

Я попытался с помощью функции делегата:

- (BOOL)textView:(NSTextView *)aTextView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString 

, но это не дает мне только строка замены не полную строку, мне нужно для проверки. Я могу позже использовать текст

Я нашел

- (void)textDidChange:(NSNotification *)aNotification 
- (void)controlTextDidChange:(NSNotification *)aNotification 

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

И да, я прочитал binding NSTextField to NSNumber, но это не дает мне никаких подсказок, как решить мою проблему.

Все, что мне нужно, это простая функция тестирования «- BOOL» acceptNewValue (NSString string). Почему все так сложно, что Cocoa начинает ощущаться как MFC.

ответ

3

Я попытался с помощью функции делегата:

Вы имеете в виду реализации метода. Использование этого будет означать вызов его, что является задачей NSTextView, и это метод Objective-C, а не C-функция.

- (BOOL)textView:(NSTextView *)aTextView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString 

, но это не дает мне только строку замены не в полной мере строки мне нужно для проверки.

Кроме этого делает: Вы можете задать вид текста для the previous complete string, apply the change yourself на изменяемую копию этой строки, а затем проверить полученную строку. Возврат NO, если это изменение приведет к недопустимому вводу.

+0

Спасибо, что решает проблему. Но у меня есть новый http://stackoverflow.com/questions/3605571/how-to-set-nsformatter-to-accept-negative-integer-values – Lothar