2014-09-05 2 views
0

My tableOne содержит пользовательский UITableViewCell под названием CustomCellForTableOne (.h и .m). Когда пользователь нажимает на ячейку в tableOne, я хочу, чтобы они перешли к tableTwo. До сих пор так легко.iOS: создать табличный «заголовок» программно из существующей ячейки

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

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

Спасибо всем за отличные ответы: +1. Я собираюсь реализовать и отчитаться на основе того, какой из них лучше всего подходит для меня. Большое вам спасибо за помощь. – learner

ответ

1

Должно быть возможным, поскольку представление ячейки и заголовка для таблицы наследуется от UIView. Внесите в таблицу TableTwo следующее и верните из него экземпляр ячейки таблицы. -

- (UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section 
+0

Мне нужно что-то подобное, но этот метод никогда не называется. –

+0

Внедрение UITableViewDelegate и UITableViewDataSource – Avi

1

Заголовки трудно обрабатывать в виде стола. Я бы поставил дополнительный раздел во второй таблице только для этой конкретной ячейки, которая была пройдена. Это может быть первый раздел второй таблицы, и вы можете его спроектировать, поскольку он выглядит как заголовок.

Другой способ - создать простой вид и поместить его в заголовок второй таблицы (это полностью законно). Затем вы можете безопасно добавить свою конкретную ячейку (если она имеет представление) в этом простом виде через addSubView:.

1

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

- (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; 

А потом в 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

0

Вы можете создать свой собственный UITableViewCell в файле XIb и загрузить его для каждого вида. Вам нужно будет создать его в обоих диспетчерах. В зависимости от того, насколько сложным, вы также можете сделать это полностью в коде.

Смежные вопросы