Как мы можем динамически добавлять новую ячейку между двумя данными ячейкой в ​​TableView?

Мне нужно добавить новую ячейку для выбора ячейки таблицы. Новая ячейка должна находиться ниже выбранной ячейки. Мы можем сделать это?

Ниже приведен код, в котором я создаю 4 ячейки и хочу вставить ячейку между 2 и 3.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; cell= [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; if(indexPath.row == 0){ cell.textLabel.text = @"My Tweets"; cell.textLabel.textColor = [UIColor whiteColor]; cell.backgroundColor = [UIColor blackColor]; cell.imageView.image = [UIImage imageNamed:@"tweets.png"]; } if(indexPath.row == 1){ cell.textLabel.text = @"Search"; cell.backgroundColor = [UIColor blackColor]; cell.textLabel.textColor = [UIColor whiteColor]; cell.imageView.image = [UIImage imageNamed:@"search.png"]; } if(indexPath.row == 2){ cell.textLabel.text = @"Followers"; cell.textLabel.textColor = [UIColor whiteColor]; cell.backgroundColor = [UIColor blackColor]; cell.imageView.image = [UIImage imageNamed:@"followers.png"]; } if(indexPath.row == 3){ cell.textLabel.text = @"Following"; cell.textLabel.textColor = [UIColor whiteColor]; cell.backgroundColor = [UIColor blackColor]; cell.imageView.image = [UIImage imageNamed:@"following.png"]; } return cell; 

}

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { //here I have to insert a new cell below on the click this existing cell. if(indexPath.row == 1) { NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:indexPath.row+1 inSection:0]; NSArray *indexPaths = [NSArray arrayWithObject:newIndexPath]; [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPaths] withRowAnimation:UITableViewRowAnimationAutomatic]; } 

}

3 Solutions collect form web for “Как мы можем динамически добавлять новую ячейку между двумя данными ячейкой в ​​TableView?”

Вы должны обновить свой источник данных, а затем вызвать этот метод UITableView:

 - (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation 

Это вызовет

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

метод источника данных табличного представления и обновите таблицу, с выбранной вами анимацией.

Вы не создали бы новую ячейку в методе didSelectRowAtIndexPath, как вы это делаете в коде, который вы разместили.


отредактирован для добавления информации.

Чтобы установить массив indexPaths (для вашего случая), вы можете сделать это:

 NSInteger row = [indexPath row]; NSInteger section = [indexPath section]; NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:row+1 inSection:section]; NSArray *indexPaths = [NSArray arrayWithObject:indexPath]; 

Что касается вашего вопроса, не делайте indexpath.row + 1 при создании массива по пути индекса, а затем вызывайте insertrowatindexpath в tableview ……… aloso reload table, и все готово.

Вы можете добавить этот метод для добавления строк в таблицу

  - (void)setEditing:(BOOL)editing animated:(BOOL)animated { [super setEditing:editing animated:animated]; NSArray *paths = [NSArray arrayWithObject: [NSIndexPath indexPathForRow:1 inSection:0]]; if (editing) { [[self tableView] insertRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationTop]; } else { //Your Operation [[self tableView] deleteRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationTop]; } [tableView reloadData]; } 

Вы можете использовать описанный выше метод, если у вас есть подклассы UITableview else, пройдя через учебник

Также укажите, какое событие вы хотите вставить в строки. Просто чтобы вставить строку, вы можете реализовать следующую логику:

Создать массив для путей: –

 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 

вам нужно указать номер предыдущей строки, после которой вы хотите вставить строку и раздел, а затем вы вызываете метод insertRowsAtIndexPaths: withRowAnimation: на столе и перезагружаете его.

Просто вызовите делегатов insertrowsatindexpath в начале цикла обновления и завершения обновления. Например, попробуйте сделать это следующим образом:

 [tableViewForFinishRace beginUpdates]; NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:arrayForTitle.count-1 inSection:0]; NSLog(@"index path for insertion =%@",newIndexPath); [tableViewForFinishRace insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationTop]; [arrayForTitle insertObject:@"Gearing Up for a" atIndex:arrayForTitle.count-1]; [arrayForImage insertObject:@"gearing-up-icon.jpeg" atIndex:arrayForTitle.count-2]; [tableViewForFinishRace endUpdates]; 
  • Как правильно связать сторонние библиотеки в iOS
  • как установить выбранную галочку как отмеченную в tableview ячейке swift 3.0
  • Нет .xib-файла, когда я создаю новое «Пустое приложение» в XCode
  • Апостроф в имени приложения
  • Как метод ввода типа (автоматическое определение типа) работает быстро?
  • Сделать приложение для iPhone конкретного приложения на iPad для удовлетворения требований Apple
  • Управление представлением сообщений iOS, например, iMessage
  • Как вставить проект единства ios с другим проектом ios
  • Xcode - ошибка компилятора Swift: невозможно преобразовать тип выражения «Double», чтобы ввести «Double»
  • UITableViewCell с динамической высотой UIWebView
  • : непризнанный селектор, отправленный в экземпляр 0x6d21350
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.