UITableView должен выглядеть как «Контакты с полями редактирования»

У меня есть UITableView, с которым я хочу работать аналогично приложению «Контакты», в котором есть кнопка редактирования, которая при нажатии преобразует ячейки в ячейки редактирования.

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

Некоторые другие ответы здесь включали «Монитор, когда изменяется свойство редактирования табличного вида (когда нажата кнопка« Редактировать »). Затем добавьте код к вашим методам делегатов для компоновки, рисования и вставки ячеек по-другому, когда просмотр таблицы находится в редактировании Режим." это именно то, что я хочу, но не знаю, как это сделать.

- (void)setEditing:(BOOL)flag animated:(BOOL)animated { [super setEditing:flag animated:NO]; if (flag == YES){ // Change views to edit mode. self.textField = [[UITextField alloc] initWithFrame:[_titleLabel frame]]; [self.textField setText:_titleLabel.text]; [self.view addSubview:self.textField]; } else { // Save the changes if needed and change the views to noneditable. [_titleLabel setText:self.textField.text]; [self.textField removeFromSuperview]; } } 

В моем методе у меня есть код, взятый из другого вопроса, который работает … вроде (он делает новое редактируемое текстовое поле «на лету» в неправильном месте и не скрывает метку). Перед редактированиемВо время редактированияПосле редактирования

Рекомендации Apple не являются достаточно конкретными для меня, чтобы понять, как развивать представления.

В двух словах, как это работает, вы устанавливаете флаг редактирования во всем UITableView а затем реализуете пару методов (canEditRowAtIndexPath, commitEditingStyle), объявленных в протоколе UITableViewDataSource , которые определяют, какие ячейки редактируются.

Поэтому сначала вам нужно поместить UITableVIew в режим редактирования. Вы хотите сделать это в обработчике своей кнопки на панели инструментов:

[self.tableView setIsEditing:YES animated:NO];

Затем, canEditRowAtIndexPath вызовет canEditRowAtIndexPath чтобы определить, можно ли отредактировать строку:

 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 

Наконец, когда пользователь выполнил редактирование, этот метод вызывается:

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDataSource_Protocol/Reference/Reference.html

Здесь есть еще один пример:

http://www.behindtechlines.com/2012/06/02/enabling-configuring-uitableview-edit-mode/

У меня есть обходное решение.

Если я создаю пользовательскую строку и сделаю ее похожей на стиль «левая деталь», но используя текстовое представление справа вместо ярлыка, я могу изменить поля «seteditable» и «setenabled» в представлениях, чтобы на они позволяют редактировать. Я взломал цвет шрифта, чтобы он менялся при нажатии на редактирование, чтобы пользователь мог видеть, что он теперь доступен для редактирования.

Это кажется очень грязным – так что я все еще ищу лучший способ сделать это.

 - (void)setEditing:(BOOL)flag animated:(BOOL)animated { [super setEditing:flag animated:NO]; if (flag == YES){ [self.tableView setEditing:YES animated:NO]; [self.sampleLabel setEnabled:YES]; [self.sampleLabel setTextColor:[UIColor blackColor]]; } else { [self.sampleLabel setEnabled:NO]; [self.sampleLabel setTextColor:[UIColor darkGrayColor]]; } } - (void)configureView { self.titleLabel.text = [[self.detailItem valueForKey:@"title"] description]; self.ticketNumberLabel.text = [[self.detailItem valueForKey:@"reference"] description]; self.detailsLabel .text = [[self.detailItem valueForKey:@"details"] description]; self.sampleLabel.text = [[self.detailItem valueForKey:@"reference"] description]; // initially set labels to not be editable [self.detailsLabel setEditable:NO]; [self.sampleLabel setEnabled:NO]; } - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // Return NO if you do not want the specified item to be editable. // item can't be deleted now return NO; } 

одиндватри

  • Каков наиболее эффективный способ памяти для обновления таблицы с данными, iOS, Swift 3?
  • Создание всего текста в ячейке UITableView
  • Множество UILabels внутри саморазмера UITableViewCell
  • XCode 7.1.1. Просмотр содержимого TableViewCell уже, чем ячейка
  • Значения IndexPath меняются при прокрутке UITableviewcells?
  • Как узнать, что tableView начал прокрутку
  • Как реализовать представление, которое отображается как календарь в календаре?
  • Пользовательская ячейка с переменной высотой
  • Интервал индексов раздела UITableView на iOS 7
  • UITableView отставание при установке AVPlayerItem
  • TableView округлые углы и тени
  • Давайте будем гением компьютера.