#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;
}