iPhone запрещает пользователю вводить пространство в текстовом поле - PullRequest
7 голосов
/ 20 августа 2009

Я хочу запретить пользователю вводить пробел в UITextField. для этого я использую этот код

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if ( string == @" " ){
        UIAlertView *error = [[UIAlertView alloc] initWithTitle:@"Error" message:@"You have entered wrong input" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
        [error show];
        return NO;
    }
    else {
        return YES;
    }
}

но это не работает .... что в этом плохого?

Ответы [ 6 ]

10 голосов
/ 20 августа 2009

Это будет поиск, чтобы увидеть, содержит ли ваша строка замены пробел, если это так, то она выдает сообщение об ошибке, если нет, то возвращает ДА.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
    NSRange spaceRange = [string rangeOfString:@" "];
    if (spaceRange.location != NSNotFound)
    {
        UIAlertView *error = [[UIAlertView alloc] initWithTitle:@"Error" message:@"You have entered wrong input" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
        [error show];
        return NO;
    } else {
        return YES;
    }
}
10 голосов
/ 20 августа 2009

Проблема

string == @" "

неправильно. Равенство для строк выполняется с помощью:

[string isEqualToString:@" "]

:.)

4 голосов
/ 19 марта 2014

Текущий ответ таков:

Установите View Controller, чтобы он соответствовал UITextFieldDelegate (должен выглядеть примерно так в верхней части вашего кода):

@interface YourViewController () <UITextFieldDelegate>

...

@ end
@ implementation YourViewController

...

@end

Затем заставьте текстовое поле использовать View Controller в качестве его делегата. Сделайте это, перейдя в Интерфейсный Разработчик, управляйте щелчком по текстовому полю и перетаскиванием линии к желтому кружку на панели под Контроллером представления и выберите «делегировать» из всплывающего меню. В качестве альтернативы вы можете сделать это в коде, установив делегат после создания свойства, описанного в следующем абзаце. Сделайте это так с self.yourTextField.delegate = self; в соответствующем месте, возможно, в viewDidLoad.

Также установите textField как свойство в View Controller. Сделайте это, перейдя в Интерфейсный Разработчик с его открытым кодом в редакторе помощника, и управляйте щелчком и перетащите из текстового поля в Интерфейсном Разработчике к месту в коде, где перечислены свойства (между @interface и первым @конец). Затем введите имя во всплывающем окне. В приведенном ниже коде я использовал «yourTextField», например. (вы можете пропустить этот раздел вместе с внешним циклом if в приведенном ниже коде, если вы уверены, что это единственное текстовое поле, которое будет использовать View Controller в качестве своего делегата, но лучше всего заранее планировать будущие возможности)

Тогда вы можете запретить ввод пробелов, используя следующий метод делегата:

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == self.yourTextField)
    {
        if ([string isEqualToString:@" "] )
        {
            return NO;
        }
    }
    return YES;
}
2 голосов
/ 20 августа 2009

Попробуйте это (установите это в вашем - (BOOL) textField: (UITextField *) textField следуетChangeCharactersInRange: (NSRange) диапазон replaceString: (NSString *) строка):

NSArray *escapeChars = [NSArray arrayWithObjects:@" ", nil];

NSArray *replaceChars = [NSArray arrayWithObjects:@"",nil];
int len = [escapeChars count];
NSMutableString *temp = [[textField text] mutableCopy];
for(int i = 0; i < len; i++) {
    [temp replaceOccurrencesOfString: [escapeChars objectAtIndex:i] withString:[replaceChars objectAtIndex:i] options:NSLiteralSearch range:NSMakeRange(0, [temp length])];
}
[textField setText:temp];
return TRUE;
1 голос
/ 20 августа 2009
string == @" "

Разве это не просто сравнение адреса каждого из string и @" "? Это не то сравнение, которое вы хотите сделать.

Также вы хотите запретить им вводить строку, которая является просто пробелом? Если это так, то вам нужно изменить это == на правильное сравнение строк, и все готово. Если нет, и вы хотите запретить все пробелы во входной строке, тогда вам нужно соответствие строк

0 голосов
/ 16 апреля 2017

Ниже приведено то, что я использую для пароля и подтверждения пароля

В PrefixHeader.pch файл добавить ниже

#define NONACCEPTABLE_PASSWORD_CHARACTERS @" "

А в коде используйте ниже.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string  {


    if (textField==passwordTF || textField==confirmPasswordTF) {
        NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString:NONACCEPTABLE_PASSWORD_CHARACTERS];

        NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

        return [string isEqualToString:filtered];
    }

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