iOS: создать заголовок таблицы программно из существующей ячейки

Мой tableOne содержит пользовательский UITableViewCell, который называется CustomCellForTableOne (.h и.m). Когда пользователь нажимает на ячейку в tableOne, я хочу, чтобы он переходил к tableTwo. Пока все просто.

Я хочу, чтобы ячейка в tableOne стала заголовком таблицы в tableTwo. Есть ли простой прямой способ сделать это? В идеале я хочу просто создать CustomCellForTableOne из данных, которые передаются через segue, и назначить эту ячейку в качестве заголовка моего tableTwo.

  1. Я не знаю, как назначить заголовок для таблицы программно (так что я мог попробовать это)
  2. Будет ли это работать? (так как я все еще не попробовал это, я думал, что мог бы попросить сэкономить некоторое время) Или я должен выбрать другой подход?

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-файле и загрузить его для каждого представления. Вам придется создать его в обоих контроллерах представления. В зависимости от сложности, вы также можете сделать это полностью в коде.

Другие вопросы по тегам