iOS:从现有单元格以编程方式创建表“标题”
Posted
技术标签:
【中文标题】iOS:从现有单元格以编程方式创建表“标题”【英文标题】:iOS: create table "header" programmatically from existing cell 【发布时间】:2014-09-05 20:35:24 【问题描述】:我的 tableOne 包含名为 CustomCellForTableOne(.h 和 .m)的自定义 UITableViewCell。当用户单击 tableOne 中的单元格时,我希望他们继续使用 tableTwo。到目前为止很容易。
我希望 tableOne 中的单元格成为 tableTwo 中的表头。有没有一种简单直接的方法来做到这一点?理想情况下,我想从通过 segue 传递的数据简单地创建一个 CustomCellForTableOne 并将该单元格分配为我的 tableTwo 的标题。
-
我不知道如何以编程方式将表头分配给表(所以我可以试试)
它会起作用吗? (因为我还没有尝试过,我想我可能会要求节省一些时间)或者我必须采取一些不同的方法吗?
【问题讨论】:
感谢大家的精彩回答:+1。我将根据哪一个最适合我来实施和报告。非常感谢大家的帮助。 【参考方案1】:应该可以作为表格的单元格和标题视图都继承自 UIView。在您的 tableTwo 中实现以下内容并从中返回您的表格视图单元格实例。 -
- (UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section
【讨论】:
我需要类似的东西,但这个方法永远不会被调用。 实现 UITableViewDelegate 和 UITableViewDataSource【参考方案2】:标题在表格视图中很难处理。我会在第二个表中放置一个额外的部分,仅用于已通过的特定单元格。这可能是第二个表格的第一部分,您可以将其设计为看起来像标题。
另一种方法是创建一个普通视图并将其放在第二个表的标题中(这是完全合法的)。然后,您可以通过addSubView:
在该普通视图中安全地添加您的特定单元格(如果它有视图)。
【讨论】:
【参考方案3】:我能够在第一个视图控制器中使用以下代码实现您想要做的事情:
- (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
【讨论】:
【参考方案4】:您可以在 xib 文件中创建自定义 UITableViewCell 并为每个视图加载它。您将不得不在两个视图控制器中创建它。根据复杂程度,您也可以完全在代码中完成此操作。
【讨论】:
以上是关于iOS:从现有单元格以编程方式创建表“标题”的主要内容,如果未能解决你的问题,请参考以下文章