У меня есть пользовательский UITableView
с UITextFields
внутри. В cellForRow...
я сделал делегата textFields
. (В моем основном классе VC.) Как я получаю текст от textField
на textFieldDidEndEditing
, и я добавляю его к mutableArray
.Когда вызывается textFieldDidEndEditing, приложение freezes
я тогда разные идентификаторы клеток, которые добавляются при получает выборе кнопки: (. Существует в этом cellID
textField
и я поставил delegate
к себе)
- (IBAction)addRow:(id)sender
{
NSInteger row = [self.rowArray cound];
[self.rowArray insertObject:@"anotherCell" atIndex:row];
NSIndexPath *indexPath = [NSindexPath indexPathForRow:row inSection:0];
[self.myTableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
В textFieldDidEndEditing
, Я сделал NSLog
textField.text
, и когда этот метод вызывается из textField
, который был там изначально, он работает так, как ожидалось.
Но когда textFieldDidEndEditing
вызывается из textField
, который находится в ячейке anotherCell
(добавленная ячейка), тогда весь симулятор замерзает.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellID = [self.rowArray objectAtIndex:[indexPath row]];
customCell *cell = [tableView dequeuereusablecellwithidentifier:cellID forIndexPath:indexPath];
cell.name.delegate = self; // From cell that is initially there
cell.phoneNumber.delegate = self; // From the added cell
return cell;
}
(Если это сбивает с толку, или если вам нужно больше кода, просто дайте мне знать в комментариях. Спасибо)
Редактировать
- (void)textFieldDidEndEditing:(UITextField *)textField
{
if (textField.tag <= 9)
{
NSLog(@"%@", textField.text); // This works
}
UIView *superview = textField.superview;
while (![superview isMemberOfClass:[UITableViewCell class]]) {
superview = superview.superview;
}
CustomCellClass *cell = (CustomCellClass *)superview;
NSIndexPath *indexPath = [self.myTableView indexPathForCell:cell];
if (textField.tag >= 12)
{
if ([self.inputArray count] > indexPath.row) // So I won't get the error message of [__NSArrayM objectAtIndex:]: index 1 beyond bounds for empty array'
{
for (NSUInteger i = [self.inputArray count]; i < indexPath.row; i++) {
[self.inputArray insertObject:@"" atIndex:i];
NSLog(@"%lu", (unsigned long)i);
}
}
NSLog(@"%@", self.inputArray);
}
}
Пробовал ли вы использовать отладчик с точкой останова в этом обратном вызове делегата, чтобы узнать, как далеко он попадает в него, если вообще до того, как приложение зависает? – clearlight
Что вы делаете, это не обычный способ использования вида таблицы. У вас должен быть только один идентификатор ячейки для каждого типа ячейки. Итак, если у вас есть только один динамический прототип, у вас должен быть только один идентификатор. Кроме того, если проблема возникает при вызове textFieldDidEndEditing, то вам нужно показать, какой код у вас есть в этом методе. – rdelmar
Только что [от моего вопроса с помощью метода. Кроме того, у меня есть более 1 идентификатор ячейки –