UITableView - 具有相同数组的部分中的不同行

时间:2015-06-03 22:00:28

标签: ios uitableview swift

我有一个数组,我从后端获取它的值,我有一个UITableView,包含3个部分和不同的行:

 override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Potentially incomplete method implementation.
    // Return the number of sections.
    return 3
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.

    if section == 1 {

        return 2
    } 
    else if section == 2 {

        return 1

    } else {

        return 3
    }

}




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


    let myCell: CellTableViewCell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as! CellTableViewCell

    // Configure the cell...

    if indexPath.section == 1 {

        myCell.titleLabel.text = titles[indexPath.row + 3]

    }
    else if indexPath.section == 2 {

        myCell.textLabel?.text = "Section 2"

    }
    else {


        myCell.titleLabel.text = titles[indexPath.row] // ERROR!

    }

    return myCell
}


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

    return "Section"
}

我需要让来自2个不同部分的单元格从同一个数组中获取数据,并且我在中间有一个部分,它应该从不同的数组中获取它的数据。当我跑步时,我得到这个错误:

fatal error: Array index out of range

我的数组包含5个值,它是这样的:

 titles = ["1", "2", "3", "4", "5"]

PS:我的TableView

有自定义单元格

编辑:我编辑了部分安排(我第一次知道它们是从下到上编入索引),但是我仍然得到了我的最后一部分单元格的错误,也有一个非常奇怪的行为,当我向下滚动然后备份,第2部分替换第1部分的第3个单元格,它被移动到表格的底部!

2 个答案:

答案 0 :(得分:4)

你不能像你正在做的那样使用循环,因为它只是为该部分中的每个单元格提供循环的最后一个索引中的值(索引2或4)。通常,对于分段表视图,您将使用数组数组来填充节。如果您想使用单个数组,并且每个部分中的行数保持不变,那么以下内容应该可以正常工作,

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var titles = ["1", "2", "3", "4", "5"]

    override func viewDidLoad() {
        super.viewDidLoad()
    }

     func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 3
    }

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

        if section == 0 {

            return 3
        }
        else if section == 1 {

            return 1

        } else {

            return 2
        }
    }

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

        let myCell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell

        if indexPath.section == 0 {
            myCell.textLabel!.text = titles[indexPath.row]
        }
        else if indexPath.section == 1 {
            myCell.textLabel!.text = "Section 2"
        }
        else {
            myCell.textLabel!.text = titles[indexPath.row + 3]
        }

        return myCell
    }

}

这为六个单元格提供了1,2,3,“Section 2”,4,5(我在测试用例中使用了标准的UITableViewCell)。

答案 1 :(得分:1)

您的数组有5个值,但您的代码建议您有6个。请查看您的tableView(tableView: UITableView, numberOfRowsInSection section: Int)