Заставить NStextField принимать только шестнадцатеричные значения - PullRequest
4 голосов
/ 06 октября 2011

У меня есть два текстовых поля.Один принимает только числовые значения, а другие шестнадцатеричные значения.Я использую NSNumberformatter, чтобы установить только числовой ввод, например:

NSNumberFormatter *formatter;
formatter = [[[NSNumberFormatter alloc] init] autorelease];
[formatter setNumberStyle:NSNumberFormatterNoStyle];

, а затем применить его к TextField.

Как сделать то же самое, но принимать только шестнадцатеричные значения?Под шестнадцатеричным я имею в виду 1234567890ABCDEF.

В качестве альтернативы, если это невозможно, как проверить, является ли текст в этом TextField шестнадцатеричным?

Спасибо

Ответы [ 3 ]

3 голосов
/ 06 октября 2011

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

Изменить, чтобы добавить: один из способов проверить, является ли строка шестнадцатеричной:

NSCharacterSet* nonHex = [[NSCharacterSet
  characterSetWithCharactersInString: @"0123456789ABCDEFabcdef"]
  invertedSet];
NSRange nonHexRange = [aString rangeOfCharacterFromSet: nonHex];
BOOL isHex = (nonHexRange.location == NSNotFound);
1 голос
/ 06 октября 2011

См. Этот ответ для гораздо лучшего объяснения , но это будет что-то вроде:

- (void)controlTextDidChange:(NSNotification *)aNotification {
    NSError *outError;
    NSControl *textField = [aNotification object];
    NSString *myText = [textField stringValue];

    // check if myText is 0-9 or a-f, do something with it if its not hex.

    // update the NSNextField with the validated text
    [postingObject setStringValue:myText];
}
0 голосов
/ 06 октября 2011
     - (void)textDidChange:(NSNotification *)aNotification
    {
    //ask the notification for it's sender to return the field object, ask the text field for it's string, if the last char of the string is not valid, delete it and update the string of the field.
//Optionally play the "bell"(alert sound).
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...