Разрешить пользователю вводить только семь слов, разделенных запятыми

У меня есть UITextfield, в котором я хочу, чтобы пользователь вводил текст, разделенный запятыми

пример: слон, лиса и т. д. Также я хочу запретить пользователю вводить не более 7 слов, разделенных запятыми.

Я написал этот код в методе делегата UITextfield

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  NSArray *numberOfWords = [self.tagsTextField.text componentsSeparatedByString:@","];
    if([numberOfWords count] > 6)
    {
        return NO;
    }
    else
    {
        return YES;
    }
}

Я не могу добиться желаемого поведения, пожалуйста, помогите!


person Avinash Sharma    schedule 16.03.2017    source источник


Ответы (3)


попробуй это:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:  (NSRange)range replacementString:(NSString *)string
  {
 NSArray *numberOfWords = [self.tagsTextField.text componentsSeparatedByString:@","];
if([numberOfWords count] > 6 && [string isEqualToString:@","])
{
    return NO;
}
else
{
    return YES;
}
}

Вы можете заблокировать вторые пробелы и что-то в этом роде.

person Onik IV    schedule 16.03.2017

В вашем коде он ограничит пользователя на ввод седьмого слова, а также не позволит пользователю стереть после ввода 6-го слова.

Попробуйте этот код,

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSArray *numberOfWords = [self.textField.text componentsSeparatedByString:@","];
    if([numberOfWords count] > 7)
    {
        if ([string isEqualToString:@""]) {
        return YES;
        } else {
        return NO;
        }

    }
    else
    {
        return YES;
    }
}

Это позволит пользователю вводить до 7 слов через запятую, и вы также можете удалять слова после ввода 7 слов.

person iPeter    schedule 16.03.2017

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

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSArray *numberOfWords = [myTextField.text componentsSeparatedByString:@","];


    NSLog(@"%d",(int)numberOfWords.count);

    NSLog(@"%@",numberOfWords);

    if([numberOfWords count] > 7 && [string isEqualToString:@","])
    {
        return NO;
    }
    else
    {
        return YES;
    }

}

введите здесь описание изображения

Надеюсь, это поможет вам.

ОБНОВИТЬ:

Этот код не будет работать в случае вставки скопированного текста в текстовое поле. Чтобы отключить копирование/вставку для textField, используйте следующий код: Уже Упоминается здесь

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    if (action == @selector(paste:))
        return NO;
    return [super canPerformAction:action withSender:sender];
}
person Abhishek Mitra    schedule 16.03.2017
comment
Давайте попробуем выбрать 3,4,5, скопируем его, дойдем до последней строки и вставим. - person Sergey; 16.03.2017
comment
@Sergey Думаешь, я скопировал :/? Хорошо, получив этот вопрос, я начал пытаться делать это самостоятельно и по совпадению совпал с другим ответом. когда я опубликовал его, даже я не видел ни одного сообщения до этого, после обновления страницы я увидел, что уже дано еще два ответа. :/ - person Abhishek Mitra; 16.03.2017
comment
Нет, я не думаю, что вы копируете ответ. Я пытаюсь объяснить вам, что в вашей реализации есть ошибка, однако в других реализациях тоже есть эта ошибка. - person Sergey; 16.03.2017
comment
@SergeyOh, извините меня, я не думал об этом по-вашему, я пробовал и нашел то же самое, что вы упомянули, тогда мой и чужой ответ тоже неверны. если мы отключим копирование и вставку для этого текстового поля, тогда все будет в порядке. :) . - person Abhishek Mitra; 16.03.2017
comment
Вы можете изменить свой ответ, чтобы решить эту проблему, вы можете увидеть мой комментарий в разделе вопросов, но мне не нравится эта реализация. - person Sergey; 16.03.2017