Удалить / обновить элемент из NSMutableArray, когда пользователь нажимает клавишу Backspace в UITextField - PullRequest
0 голосов
/ 08 апреля 2019

Я использую одну стороннюю библиотеку 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, когда пользователь нажимает @.
Теперь я хочу, чтобы пользователь добавил только одно имя текстового поля. Я показываю предупреждение, когда пользователь добавляет секунду, но в этом методе есть проблема, когда я нажимаю клавишу Backspace и удаляю весь текст, но в этом массиве есть значение.

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

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

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Я не совсем понял, каковы ваши требования, но до сих пор я думаю, что вы можете использовать один из методов делегирования 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;
}
0 голосов
/ 08 апреля 2019

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

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. Дайте мне знать, если вам требуется дополнительная информация.

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

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