Удаление / обновление элемента из NSMutableArray, когда пользователь нажимает пробел в UITextField

#ios #objective-c #nsmutablearray

#iOS #objective-c #nsmutablearray

Вопрос:

Я использую одну стороннюю библиотеку HashtagMentionController . Вот метод, который я использую

 - (void) hashtagMentionController:(HashtagMentionController *)hashtagMentionController onMentionWithText:(NSString *)text range:(NSRange)range {
    if ([text isEqualToString:@""]) {
        if ([self.arrFinalUUID count] < 1) {
            self.userListView.hidden = FALSE;
            [self.txtNotes resignFirstResponder];
            self.replaceRange = range;
            self.matchedNames = [[self.names filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
                return [evaluatedObject rangeOfString:text].location != NSNotFound;
            }]]mutableCopy];
            self.matchedNames = names;
            [self.tableHashtag reloadData];
        } else {
            [self presentViewController:[Common alertWithTitle:NSLocalizedString(@"Alert", @"Message") withMessage:NSLocalizedString(@"You can not select more than 1 user", @"Message") preferredStyle:UIAlertControllerStyleAlert] animated:YES completion:NULL];
        }
    } else {

       NSLog(@"backspace pressed");
       }
}  
  

Я добавил этот метод в свой UITextView, когда пользователь нажимает @.
Теперь я хочу, чтобы пользователь добавил только одно имя — textfield. Я показываю предупреждение, когда пользователь добавляет второе, но в этом методе возникает проблема, когда я нажимаю backspace и удаляю весь текст, в котором все еще есть значение в этом массиве.

Итак, я хочу обработать пробел в этом методе (когда пользователя нет, я хочу разрешить пользователю удалять старый массив и добавлять новое значение)
Я могу обновить свой вопрос, если кому-то потребуется дополнительная информация.

Заранее спасибо.

Ответ №1:

Используя этот код, вы можете обнаружить пробел:

 const char * _char = [string cStringUsingEncoding:NSUTF8StringEncoding];
int isBackSpace = strcmp(_char, "b");

if ([self.arrFinalUUID count] < 1) {
    if (isBackSpace == -8) {
        NSLog(@"Backspace was pressed"); // So you can allow the user to remove an old array.
    }
}
  

Вам просто нужно изменить свои условия isBackSpace . Дайте мне знать, если вам потребуется дополнительная информация.

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

Комментарии:

1. @Mihir Oza Не могли бы вы изучить этот ответ и сообщить мне, если вам потребуется дополнительная помощь от меня. Спасибо

Ответ №2:

Я не совсем понял, в чем заключается ваше требование, но пока я думаю, что вы можете использовать один из UITextField методов делегирования textField:shouldChangeCharactersInRange:replacementString: , используя этот метод делегирования, вы можете получить доступ к каждому символу, который вы вводите в реальном времени. Другими словами, вы можете получить только один символ, который нажат на клавиатуре.

Подробнее об этом методе см. здесь для документации.

Для обнаружения клавиш пробела и обратного пробела я использую следующий код:

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    //Add this condition if you need to know about a specified text field.
    if(textField==yourTextField)
    {                   
        NSLog(@"Tapped key is:%@",string);
        if([string isEqualToString:@" "])
        {
            NSLog(@"Spacebar tapped.");
        }
        else if([string isEqualToString:@""]||(string.length==0))
        {
            NSLog(@"Backspace tapped.");
        }            
    }
    return YES;
}