带有两个原型单元的UITableView

时间:2015-11-18 23:55:36

标签: ios swift uitableview

更新 - 感谢Farhad回答我的初始帖子。在这篇文章的底部是我遇到的关于动态单元格高度自动标注的新问题

我试过搜索其他帖子但无济于事。

正如标题所示,我希望我的表视图显示两个单元格,第二个单元格是自定义的。

第一个单元格将有4行--O.D,Weight,I.D,Grade。

第二个单元格(自定义单元格)将有8个标签显示来自第一个单元格的输入结果。

我有两个单元格的重用标识符。第一个小区我称之为" capacityCell"我的第二个单元格叫做" cell2"

对于我的第二个单元格,我创建了一个名为" CapacitiesTableViewCell"的新tableViewCell文件。 8个标签中有4个作为出口。

SIDE注意:对于单元格的名称,我只是放了一个通用的" Section#,Row#"现在,但是当我发现问题时,会将代码行更改为cell.textlabel?.text = capacityID ...假设这是正确的方法。

到目前为止,这是我的代码:

class CapacitiesTableViewController: UITableViewController {

let capacityParameters = ["O.D", "Weight", "I.D", "Grade"]

override func viewDidLoad() {
    super.viewDidLoad()

    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 2
}

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

    if section == 0 {
        return capacityParameters.count
    } else {
        return 1
    }

}


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

    //let capacityID = capacityParameters[indexPath.row]
    cell.textLabel?.text = "Section \(indexPath.section) Row \(indexPath.row)"

    return cell

    let dimensionAndStrengthCell = tableView.dequeueReusableCellWithIdentifier("cell2", forIndexPath: indexPath)
    // my code goes here
    return dimensionAndStrengthCell
}

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

    if section == 0 {
        return "Casing Specification"
    } else {
        return "Dimension & Strength"
    }
}

这是我的故事板: enter image description here

然而,当我运行应用程序时,我得到了这个: enter image description here

改变CELL2的细胞高度

所以在我的viewDidLoad中我有以下内容:

override func viewDidLoad() {
    super.viewDidLoad()

    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem()

    self.tableView.rowHeight = UITableViewAutomaticDimension
    self.tableView.estimatedRowHeight = 200.0
}

我试图让我的观点看起来像下面的截图,但是"强度和尺寸"节单元格高度卡在默认高度上。 enter image description here

我从Farhad的回复中添加的新代码是:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    // init return type of cell
    var returnCell: UITableViewCell!

    if indexPath.section == 0 { // you can also check for section with section.index
        returnCell = tableView.dequeueReusableCellWithIdentifier("capacitiesCell", forIndexPath: indexPath)

        //let capacityID = capacityParameters[indexPath.row]
        returnCell.textLabel?.text = "Section \(indexPath.section) Row \(indexPath.row)"

    return returnCell

    } else {

        returnCell = tableView.dequeueReusableCellWithIdentifier("cell2", forIndexPath: indexPath)

        self.tableView.rowHeight = UITableViewAutomaticDimension
        self.tableView.estimatedRowHeight = 200.0

        return returnCell

    }
}


override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

    if section == 0 {
        return "Casing Specification"
    } else {
        return "Dimension & Strength"
    }
}

1 个答案:

答案 0 :(得分:3)

cellForRowAtIndexPath中,您需要检查您需要输入新的 row section {{1}的位置声明。

if/else