ios swift:如何在动态tableview中拥有一个静态单元格?

时间:2015-03-09 12:49:00

标签: ios uitableview swift

我想使用tableView在动态单元列表的顶部有2个静态单元格。据我了解,我必须使用动态原型tableView。但我不明白如何添加2个静态单元并设计它们,例如。将文本字段添加到第一个文本字段,将标签添加到第二个。

在故事板中我该怎么办?在Controller内部我需要做什么?如何区分静态和动态细胞?

有人可以给我一个血腥的初学者一些指导从哪里开始? 非常感谢!!

编辑: 我试过这个测试:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 5
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cardCell", forIndexPath: indexPath) as CardTableViewCell

    //static cell
    if (indexPath.row < 2) {
        cell.dyn.text = "static \(indexPath.row)"
        return cell;
    }

    // Configure the cell...
    cell.dyn.text = "buh"

    return cell
}

这导致了这个: enter image description here

稍后当我使用真实数据时,我会错过前2个数据行... 我可以以某种方式&#34;重置&#34;我创建静态单元格后的行计数器?

如何修改2个静态单元?用于添加文本字段和标签?或者我必须以编程方式执行此操作吗?

3 个答案:

答案 0 :(得分:18)

我在这里找到了帮助:Mixing static and dynamic sections in a grouped table view

我的解决方案如下:

1。 enter image description here

  1. 添加和布局静态单元格: enter image description here

  2. 为每个单元格指定一个唯一名称,并将其作为插座添加到TableViewCell

  3. 调整代码:

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 3
    }
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if (section == 2){ // my dynamic cell is index 2
            return 5 // just for testing, add here yourrealdata.count
        }
        return 1 // for static content return 1
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    
        var cell: CardTableViewCell!
    
        if (indexPath.section == 0) {
            cell = tableView.dequeueReusableCellWithIdentifier("static1", forIndexPath: indexPath) as CardTableViewCell
    
            cell.cardSetName?.text = self.cardSetObject["name"] as String
    
        }else if (indexPath.section == 1) {
            cell = tableView.dequeueReusableCellWithIdentifier("static2", forIndexPath: indexPath) as CardTableViewCell // just return the cell without any changes to show whats designed in storyboard 
    
        }else if (indexPath.section == 2) {
            cell = tableView.dequeueReusableCellWithIdentifier("cardCell", forIndexPath: indexPath) as CardTableViewCell
            cell.dyn.text = "row \(indexPath.row)" // return test rows as set in numberOfRowsInSection
        }
    
        return cell;
    } 
    
  4. 最终结果将如下所示:

    enter image description here

    我希望我可以帮助有同样问题的人:)

答案 1 :(得分:4)

您可以使用类似的东西来使用或显示您的静态单元格

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return numberOfDynamicCells + 1;
}

在您cellForRowAtIndexPath数据源中,您可以使用类似的内容。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row == 0){
// go ahead to display your static Cell
}
else{
//go ahead to display your dynamic cells.
}
return yourCell;
}

这是swift的代码。

func numberOfRowsInSection(_ section: Int) -> Int{
return numberOfDynamicCells + 1
}

在您cellForRowAtIndexPath数据源中,您可以使用类似的内容。

func cellForRowAtIndexPath(_ indexPath: NSIndexPath) -> UITableViewCell?{
if indexPath.row = 0{
// go ahead to display your static Cell
}
else{
//go ahead to display your dynamic cells.
}
return yourCell;
}

祝你好运......

答案 2 :(得分:0)

是的,您可以将静态单元格设为IBOutlet属性,并在tableView(_:cellForRowAt:)中为所需的任何索引路径返回这些属性

以下是一个例子:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  switch indexPath.row {
  case 0:
    return firstStaticCell
  case 1:
    return secondStaticCell
  default:
    let cell = tableView.dequeueReusableCell(withIdentifier: "DynamicCell", for: indexPath)

    cell.textLabel?.text = "Dynamic \(indexPath.row + 1)"
    return cell
  }
}

enter image description here