Как запретить определенные символы в UITextview - PullRequest
1 голос
/ 10 февраля 2009

У меня есть uitextview, которое можно редактировать, но есть определенные символы, которые я бы не хотел печатать.

Как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 10 февраля 2009

Это можно сделать, назначив делегата в UITextView и реализовав следующий метод в делегате:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;

В теле просто напишите некоторый код, который просматривает введенный текст, чтобы увидеть, найдете ли вы символы, которые хотите отфильтровать, если вы видите, что они возвращают NO, в противном случае возвращайте YES.

0 голосов
/ 12 марта 2013

К сожалению, это не так просто, потому что textView:shouldChangeTextInRange: replacementText: не обязательно вызывается с односимвольными строками. Он предназначен для ввода с клавиатуры, но не при вставке или при использовании распознавания речи для ввода текста.

Так что вы хотите сделать, если пользователь вставляет (или диктует) строку, содержащую запрещенные символы? Возможно, вы захотите пропустить весь действительный текст и только удалить (или заменить) ненужные символы.

Неправильная идея - исправить текст в подпрограмме делегата textViewDidChange:. Хотя это, кажется, работает, это как-то мешает речевому вводу работать в UITextView.

Правильная идея - реализовать textView:shouldChangeTextInRange: replacementText: с полной фильтрацией. Вот пример реализации, которая отфильтровывает переводы строки:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{   
    if([text isEqualToString:@"\n"]) {
        [textView resignFirstResponder]; // dismiss keyboard
        return NO;
    }

    text = [text stringByReplacingOccurrencesOfString:@"\n" withString:@" "];   // replace by spaces

    NSString *fullText = [textView.text stringByReplacingCharactersInRange:range withString:text];
    textView.text = fullText;

    return NO;
}

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

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