如何在tableview Swift中自定义两个不同的部分

时间:2015-12-13 15:14:17

标签: ios swift uitableview tableviewcell

我已在表格视图中成功实现了两个不同的部分。第1部分首先显示3个单元格,然后第2部分显示12个单元格。

我想订购它,因此第1部分将其3个单元格混合到第2部分(12个单元格)所以在这种情况下,它将每4个单元格显示一次。我希望以一种方式对其进行编码,当第2节单元格随时间增加时,它会每4个单元格保留第1节。

这是我目前的tableview委托函数

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

    return 2
}

 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete method implementation.
    // Return the number of rows in the section.
    if (section == 0) {
    return 3 // At the moment I have hard coded it will change it to array.count
    } else {
        return eventNameArray.count
    }
}

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

    if indexPath.section == 0 {
    let cell = tableView.dequeueReusableCellWithIdentifier("MovingCell", forIndexPath: indexPath) as! WhatsOnMovingTableViewCell
     // Do something!
    return cell
    }
    else {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! WhatsOnTableViewCell
    // Do something!
    return cell
    }
}

1 个答案:

答案 0 :(得分:1)

您不能混合不同部分的细胞 因为这就是你想要的解决方案是将所有部分一起删除或包含更多部分:

  • 解决方案1: 1带x单元格的部分:Cell|Cell|Cell|Cell|MovingCell|Cell|Cell|Cell|Cell|Moving Cell
  • 解决方案2:y包含1个或z个单元格的部分 - Cell|Cell|Cell|Cell + MovingCell + Cell|Cell|Cell|Cell + Moving Cell

我将向您展示解决方案1所需的代码。您需要一些变量来指示Cell - 半截面的长度,例如: let cellCountBeforeMoving = 4

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

 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 3 + eventNameArray.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if (indexPath.item + 1) % (cellCountBeforeMoving + 1) == 0 {
        let cell = tableView.dequeueReusableCellWithIdentifier("MovingCell", forIndexPath: indexPath) as! WhatsOnMovingTableViewCell
         // Do something!
        return cell
    } else {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! WhatsOnTableViewCell
        // Do something!
        return cell
    }
}

请注意,索引现在有点偏移,您必须小心访问该数组。获取与给定indexPath对应的元素的可能正确方法是

eventNameArray[indexPath.item - ((indexPath.item + 1) / (cellCountBeforeMoving + 1))]

解决方案1将最终结果如下:(您需要一些var,它可以为您提供相互替换的MovingCells数量)

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return movingCells * 2
}

 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if section % 2 == 1 {
        return 1
    }
    return cellCountBeforeMoving
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if indexPath.section % 2 == 0 {
        let cell = tableView.dequeueReusableCellWithIdentifier("MovingCell", forIndexPath: indexPath) as! WhatsOnMovingTableViewCell
         // Do something!
        return cell
    } else {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! WhatsOnTableViewCell
        // Do something!
        return cell
    }
}