Вопрос о фильтре клавиатуры iPhone - PullRequest
1 голос
/ 13 октября 2009

Я хочу ограничить количество символов, которые пользователи могут вводить на клавиатуре iPhone, поэтому я создал собственный массив. например Массив, включающий 0 ~ 9 и точку, чтобы позволить пользователям вводить цену. Тогда я могу return NO для -(BOOL)textField:shouldChangeCharactersInRange:replacementString:, если строка замены отсутствует в массиве.

Проблема в том, что кнопка возврата также отключена, когда я использую этот массив для фильтрации текста. Любые идеи о том, как включить кнопку возврата назад

Другая проблема заключается в том, что я хочу позволить пользователям вводить их имена, и поэтому я не хочу, чтобы они переключались на цифры и знаки препинания (кнопка возврата также блокируется, если я использую массив для фильтрации). Как отключить кнопку переключения на клавиатуре (теперь я просто ограничиваю их вводом ~ z, пробела и ".", Но я думаю, что отключение кнопки переключения может быть лучше)?

Ответы [ 3 ]

1 голос
/ 13 октября 2009

Я нахожу способ (возможно, недостаточно хороший, но он может выполнять работу с функцией возврата):

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if(textField == txtChargeAmt)
    {
        if(string.length == 0)  //backspace button is pressed
        {
            textField.text = [textField.text substringToIndex:(textField.text.length - 1)];
            return NO;
        }

        for(NSString *s in arrNumberAndDot)
        {
            if([string isEqualToString:s])
            {
                return YES;
            }
        }
        return NO;
    }
    else
        return YES;
}

Приветствуются другие идеи по поводу проблемы возврата. А как отключить кнопку выключателя тогда?

0 голосов
/ 12 ноября 2009

Это будет делать то, что вы хотите, более кратко (и эффективно):

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{
    NSCharacterSet *validCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@".0123456789"];

    BOOL shouldChange = 
        [string length] == 0 || // deletion
        textField != txtChargeAmt || // not the field we care about
        [string rangeOfCharacterFromSet:validCharacterSet].location != NSNotFound;

    if (!shouldChange)
    {
        // Tell the user they did something wrong.  There's no NSBeep() 
        // on the iPhone :(
    }

    return shouldChange;
}

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

0 голосов
/ 13 октября 2009

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

У меня будет два поля: буквенно-цифровое поле для ввода имени и числовое поле для ввода номера.

Или я не получаю ваш вопрос?

...