У меня есть вид таблицы, внутри которого я должен показать два текстовых поля для каждой строки.iOS: ошибка утверждения клавиатуры на UITextField
UITextField *tfName = [[UITextField alloc] initWithFrame:CGRectMake(110, baseYCordinate, 180, 30)];
tfName.textAlignment = NSTextAlignmentRight;
tfName.textColor = [UIColor whiteColor];
tfName.delegate = self;
[tfName setFont:[UIFont fontWithName:@"Avenir-Heavy" size:14]];
tfName.tag = indexPathRow;
[tfName addTarget:self action:@selector(tfNameDidChange:) forControlEvents:UIControlEventEditingChanged];
[tfName resignFirstResponder];
[tfName setReturnKeyType:UIReturnKeyDone];
[tfName addTarget:self
action:@selector(tfNameFinished:)
forControlEvents:UIControlEventEditingDidEndOnExit];
[cell addSubview:tfName];
UITextField *tfLocation = [[UITextField alloc] initWithFrame:CGRectMake(110, baseYCordinate, 180, 30)];
tfLocation.textAlignment = NSTextAlignmentRight;
tfLocation.textColor = [UIColor whiteColor];
[tfLocation resignFirstResponder];
tfLocation.delegate = self;
[tfLocation setFont:[UIFont fontWithName:@"Avenir-Heavy" size:14]];
[tfLocation addTarget:self action:@selector(tfLocationDidChange:) forControlEvents:UIControlEventEditingChanged];
tfLocation.tag = indexPathRow;
[tfLocation setReturnKeyType:UIReturnKeyDone];
[tfLocation addTarget:self
action:@selector(tfLocationFinished:)
forControlEvents:UIControlEventEditingDidEndOnExit];
[cell addSubview:tfLocation];
Я добавил следующие методы:
-(BOOL) textFieldShouldReturn: (UITextField *) textField{
[[self view] endEditing:YES];
[textField resignFirstResponder];
return YES;
}
-(void)tfNameDidChange:(UITextField *)tfName{
NSLog(@"tfName for device: %ld Value: %@", (long)tfName.tag, tfName.text);
}
-(void)tfLocationDidChange:(UITextField *)tfLocation{
NSLog(@"tfLocation for device: %ld Value: %@", (long)tfLocation.tag, tfLocation.text);
}
-(void)tfNameFinished:(UITextField *)tfName{
NSLog(@"tfName for device: %ld Value: %@", (long)tfName.tag, tfName.text);
[tfName resignFirstResponder];
}
-(void)tfLocationFinished:(UITextField *)tfLocation{
NSLog(@"tfLocation for device: %ld Value: %@", (long)tfLocation.tag, tfLocation.text);
[tfLocation resignFirstResponder];
}
UPDATE:
Я получаю динамические обновления для данных, отображаемых в таблице. После того, как обновление приходит я называю
[self.tableView reloadData];
Если клавиатура дисплея для любого из текстового поля UITableViewCell, то reloadData вызывает сбой со следующей ошибкой:
провалом утверждения - [UIKeyboardTaskQueue waitUntilAllTasksAreFinished]
Я попытался явно закрыть клавиатуру, используя
[[self view] endEditing:YES];
В этом случае сама эта строка вызывает сбой.
Пожалуйста, помогите.
привет, Могу ли я узнать, почему вы пишете строку: [[вид самостоятельной] endEditing: YES]; – hpp
@hpp: Проблема с сбоем возникает, главным образом, когда пользователь нажимает на первое текстовое поле и, не отпуская его клавиатуру, переходит во второе ключевое поле. Поэтому я пишу эту строку, чтобы отклонить все клавиатуры, связанные с текстовыми полями. Видел это как решение для какой-то другой проблемы в stackoverflow и использовал его. – Pria