在同一个View Controller中返回两个不同的自定义单元格,没有任何部分

时间:2016-09-14 07:53:00

标签: ios swift uitableview tableviewcell

我正在尝试在同一个ViewController中返回两个不同的自定义单元格而没有任何部分。问题来自方法numberOfRowsInTableView。如何返回两个单元格中的项目数?我在numberOfRowsInSection中尝试了以下代码:

var indexPath = NSIndexPath()
if indexPath.row == 2 || indexPath.row == 4 {
    return abc.count
} else {
    return xyz.count
}

但是应用程序因错误而崩溃:

  

***因未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'与UITableView一起使用的索引路径无效。传递给表视图的索引路径必须包含指定节和行的两个索引。如果可能,请在UITableView.h中使用NSIndexPath上的类别。'

3 个答案:

答案 0 :(得分:1)

如果您只有一个部分,那么numberOfRowsInSection应该只返回您在UITableView中将拥有的单元格总数。如果这是固定的,只要它是动态的(即根据数组)返回数字然后返回动态大小(数组的大小)。

答案 1 :(得分:0)

如果你只有一个由两个不同阵列组成的细胞组成的部分,则该部分中的细胞数是两个数组的总和。长度。无论细胞的顺序如何(无论是A,B,A,B,A,B ......还是A A A A B B B B)。

答案 2 :(得分:0)

对于这种情况,我们无法返回两个多个自定义单元格计数。因此,我们需要计算两个单元格的元素,其元素更大,然后返回该计数。

试试这个

    var abc = [String]()  //You can have any datatype of array
    var xyz = [String]()

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
        {
            return (abc.count > xyz.count) ? abc.count : xyz.count
        }

在这里,要在两个自定义单元格中显示值,您需要在cellForRowAtIndexPath函数中以这种方式实现。

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

        let cell = tableViewData.dequeueReusableCellWithIdentifier("cell")! as! CustomCellClass
        if indexPath.row < abc
        {
            cell.label1.text = abc[indexPath.row]
        }
        else
        {
            cell.label1.text = ""
        }
        if indexPath.row < self.xyz.count
        {
            cell.label2.text = xyz[indexPath.row]
        }
        else
        {
            cell.label2.text = ""
        }
        return cell
    }

希望它适合你。