iOS: создать заголовок таблицы программно из существующей ячейки
Мой tableOne содержит пользовательский UITableViewCell, который называется CustomCellForTableOne (.h и.m). Когда пользователь нажимает на ячейку в tableOne, я хочу, чтобы он переходил к tableTwo. Пока все просто.
Я хочу, чтобы ячейка в tableOne стала заголовком таблицы в tableTwo. Есть ли простой прямой способ сделать это? В идеале я хочу просто создать CustomCellForTableOne из данных, которые передаются через segue, и назначить эту ячейку в качестве заголовка моего tableTwo.
- Я не знаю, как назначить заголовок для таблицы программно (так что я мог попробовать это)
- Будет ли это работать? (так как я все еще не попробовал это, я думал, что мог бы попросить сэкономить некоторое время) Или я должен выбрать другой подход?
4 ответа
Это должно быть возможно, так как представление ячейки и заголовка таблицы наследуется от UIView. Реализуйте следующее в вашем tableTwo и верните из него экземпляр ячейки табличного представления. -
- (UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section
Заголовки трудно обрабатывать в табличных представлениях. Я бы поместил дополнительный раздел во вторую таблицу только для той конкретной ячейки, которая была передана. Это может быть первый раздел второй таблицы, и вы можете создать его в виде заголовка.
Другой способ - создать простое представление и поместить его в заголовок второй таблицы (это абсолютно законно). Затем вы можете безопасно добавить свою конкретную ячейку (если она имеет вид) в этом простом виде с помощью addSubView:
,
Мне удалось добиться того, что вы хотите сделать, с помощью следующего кода в первом контроллере представления:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// create the new table view
TestTableViewController2 *testView2 = [TestTableViewController2 new];
// get a reference to the cell that they clicked and create a totally new cell, a 'copy' of
// the original that we can pass to the next view
UITableViewCell *clickedCell = [tableView cellForRowAtIndexPath:indexPath];
UITableViewCell *clickedCellCopy = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
clickedCellCopy.textLabel.text = clickedCell.textLabel.text;
clickedCellCopy.detailTextLabel.text = clickedCell.detailTextLabel.text;
// set this new cell as the header cell on the new view
testView2.myHeaderCell = clickedCellCopy;
// push the new view onto the stack
[self.navigationController pushViewController:testView2 animated:YES];
}
Затем добавьте свойство в ваш второй контроллер табличного представления:
@property (nonatomic, retain) UITableViewCell *myHeaderCell;
А затем в.m viewDidLoad:
- (void)viewDidLoad {
[super viewDidLoad];
// set our header cell as the table view's header
self.tableView.tableHeaderView = self.myHeaderCell;
}
Это дало мне следующий результат:
https://www.dropbox.com/s/t42lraue1kfolf3/cell%20demo.mov?dl=0
Вы можете создать свой пользовательский UITableViewCell в xib-файле и загрузить его для каждого представления. Вам придется создать его в обоих контроллерах представления. В зависимости от сложности, вы также можете сделать это полностью в коде.