【问题标题】:iOS: create table "header" programmatically from existing celliOS:从现有单元格以编程方式创建表“标题”
【发布时间】:2014-09-05 20:35:24
【问题描述】:

我的 tableOne 包含名为 CustomCellForTableOne(.h 和 .m)的自定义 UITableViewCell。当用户单击 tableOne 中的单元格时,我希望他们继续使用 tableTwo。到目前为止很容易。

我希望 tableOne 中的单元格成为 tableTwo 中的表头。有没有一种简单直接的方法来做到这一点?理想情况下,我想从通过 segue 传递的数据简单地创建一个 CustomCellForTableOne 并将该单元格分配为我的 tableTwo 的标题。

  1. 我不知道如何以编程方式将表头分配给表(所以我可以试试)
  2. 它会起作用吗? (因为我还没有尝试过,我想我可能会要求节省一些时间)或者我必须采取一些不同的方法吗?

【问题讨论】:

  • 感谢大家的精彩回答:+1。我将根据哪一个最适合我来实施和报告。非常感谢大家的帮助。

标签: ios objective-c uitableview xcode5


【解决方案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 并为每个视图加载它。您将不得不在两个视图控制器中创建它。根据复杂程度,您也可以完全在代码中完成此操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 2011-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多