UITableView должен выглядеть как «Контакты с полями редактирования»
У меня есть UITableView, с которым я хочу работать аналогично приложению «Контакты», в котором есть кнопка редактирования, которая при нажатии преобразует ячейки в ячейки редактирования.
На данный момент они настроены с использованием стиля элементов слева, и я переопределил метод setEditing, готовый для реализации, но я не знаю, как преобразовать ячейки.
Некоторые другие ответы здесь включали «Монитор, когда изменяется свойство редактирования табличного вида (когда нажата кнопка« Редактировать »). Затем добавьте код к вашим методам делегатов для компоновки, рисования и вставки ячеек по-другому, когда просмотр таблицы находится в редактировании Режим." это именно то, что я хочу, но не знаю, как это сделать.
- Вставить в таблицуView, установленный в Autoresize, вызвать проблему с прокруткой
- Высота uitableview не изменяется динамически в быстрых ios?
- Конфликтный прокрутка по UITableView в UIScrollView
- Заказ NSDictionary не соответствует порядку allKeys
- Различные цвета, даже если значения RGB равны
- (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 не являются достаточно конкретными для меня, чтобы понять, как развивать представления.
- Хранение объекта на iOS - лучшее решение?
- Анимируйте вставку нового раздела в UITableVIew
- Как создать пользовательский UITableViewCell с nib в Xcode 4?
- UITableViewCell AutoLayout с несколькими ярлыками
- UITableView reloadData не работает, когда viewcontroller загружается во второй раз
- iOS 7 Высота увеличения TableView Под TabBar
- UITableView внутри интерфейса UICollectionView.
- Как взаимодействовать с UITableView в UIViewController?
В двух словах, как это работает, вы устанавливаете флаг редактирования во всем 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://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; }