如何制作一个自定义的TableViewCell,它们每个都有不同的高度

时间:2015-12-20 13:41:55

标签: ios swift uitableview

我试图制作一个tableViewCell,它们每个都有不同的高度。我尝试声明每个单元格标识符及其名称,并使用" switch&#34分成几个案例;。实际上我还想在代码中的mainViewCell上标注一个标签。我怎样才能改变每个细胞的高度?

 import UIKit

class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet var tableView: UITableView!
    override func viewDidLoad() {
            super.viewdidload() 
        tableView.registerNib(UINib(nibName: "mainViewTableViewCell", bundle: nil), forCellReuseIdentifier: "mainViewCell")
}

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        tableView.scrollEnabled = false
        return 4
    }


    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        switch tableView.numberOfRowsInSection(4) {
            case 0:
                let titleCell = tableView.dequeueReusableCellWithIdentifier("titleCell")! as UITableViewCell
            return titleCell
            case 1:
                let wayCell = tableView.dequeueReusableCellWithIdentifier("whichWayCell")! as UITableViewCell
                return wayCell
            case 2:
                let campusCell = tableView.dequeueReusableCellWithIdentifier("campusCell")! as UITableViewCell
                return campusCell
            default :
                    let mainViewCell = tableView.dequeueReusableCellWithIdentifier("mainViewCell")! as! mainViewTableViewCell
                    mainViewCell.mainViewLabel.text = onUpdate(timer)
                    return mainViewCell

        }
    }
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    switch tableView.numberOfRowsInSection(4) {
    case 0:
        tableView.numberOfRowsInSection(1)
    return 50
    case 1:
        tableView.numberOfRowsInSection(2)
    return 50
    case 2:
        tableView.numberOfRowsInSection(3)
    return 50
    default:
        tableView.numberOfRowsInSection(4)
    return 300
    }
}

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
}

1 个答案:

答案 0 :(得分:1)

您应该使用传递给UITableViewDataSource方法的indexPath。你的代码有几个问题。有文档here

cellForRowAtIndexPath方法中的switch tableView.numberOfRowsInSection(4)语句应为:switch(indexPath.section)

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    switch tableView.numberOfRowsInSection(4) {
    case 0:
        tableView.numberOfRowsInSection(1)
    return 50
    case 1:
        tableView.numberOfRowsInSection(2)
    return 50
    case 2:
        tableView.numberOfRowsInSection(3)
    return 50
    default:
        tableView.numberOfRowsInSection(4)
    return 300
}

为什么要调用numberOfRowsInSection()?,这应留给操作系统调用。试试这个。如果您的tableview单元格高度因部分而异,请将switch(indexPath.row)更改为switch(indexPath.section)

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    var height : CGFloat = 0

    switch(indexPath.row) {
    case 0, 2, 3:
        height = 50.0
    case 4:
        height = 300.0
    default:
         break
    }

    return height

}