Использование shouldChangeCharactersInRange для ограничения введенных символов, но не может обнаружить возврат - PullRequest
4 голосов
/ 24 ноября 2011

Я использую следующий код в моем делегате UITextField для ограничения количества символов, которые можно ввести:

К вашему сведению: Розетка UITextField называется nameChoiceField.Плюс есть розетка с надписью errorMessageLabel.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
    NSString *potentialNewChosenName = [self.nameChoiceField.text stringByReplacingCharactersInRange:range withString:string];

    NSCharacterSet *nonLettersNumbersOrDashes = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890- "] invertedSet];

    if ([potentialNewChosenName stringByTrimmingCharactersInSet:nonLettersNumbersOrDashes].length != potentialNewChosenName.length) {
        self.errorMessageLabel.text = @"Only letters, numbers etc allowed.";
        return NO;
    } else {
        self.errorMessageLabel.text = @"That's okay.";
        return YES;
    }
}

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

Однако!Когда вы нажимаете return на клавиатуре, это не разрешается (отображается сообщение об ошибке «Только буквы ....»).

Как вы ограничиваете ввод, который может сделать пользователь, и при этом все еще должны распознавать кнопку return?

Кроме того, есть ли рекомендации по распознаванию кнопки delete, которые должны быть реализованы выше?

1 Ответ

8 голосов
/ 24 ноября 2011

Оказывается, что:

возврат представлен string из @"\n"

удаление представлен string из @"" (с длиной range определение того, сколько будет удалено).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...