试图每2个indexPath.row swift添加一个部分

时间:2016-01-18 22:21:48

标签: ios swift uitableview

表格视图有点问题。我想在tableview中添加一个部分,而不会弄乱表中其他数据的内容。我想在每2个indexpath.row之后添加(cell3,thiscell) 我所拥有的是故事板上的一个部分,它是我希望在每两个索引路径后添加的一个单元格,而不会弄乱所有其他信息。我如何使用插入部分功能?或者还有其他办法吗?

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    // Table view cells are reused and should be dequeued using a cell identifier.
    if indexPath.section == 0 && cell1 == true{
        let cellIdentifier = “cell1"
        let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! SubCategoryTableViewCell
        cell.nameLabel.text = “cell1"
        cell.subNameLabel.text = ""
        return cell
    } else  if indexPath.section == 2 && vally == true{
        let cellIdentifier = "cell2"
        let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! SubCategoryTableViewCell
        cell.nameLabel.text = “Smiles"
        cell.subNameLabel.text = ""
        return cell
    } else if indexPath.row == 2 {
        let cellIdentifier = “cell3"
        let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! thisCell
        print("add this after indexpath 2")
        return cell
    } else if indexPath.section == 1 {
        let cellIdentifier = "SubCategoryTableViewCell"
        let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! SubCategoryTableViewCell
        cell.loading.hidden = false
        cell.loading.startAnimating()
        cell.nameLabel.text = subCat[indexPath.row].subCategoryName
        cell.subNameLabel.text = subCat[indexPath.row].subCategoryDesc
        return cell
    }
    let cell2: SubCategoryTableViewCell = tableView.dequeueReusableCellWithIdentifier("SubCategoryTableViewCell", forIndexPath: indexPath) as! SubCategoryTableViewCell
    cell2.userInteractionEnabled = false
    return cell2
}

2 个答案:

答案 0 :(得分:2)

您想在所有部分或任何特定部分中为indexPath.row = 2显示 cell3 吗?

如果您想要在所有部分中显示:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// Table view cells are reused and should be dequeued using a cell identifier.

if(indexPath.row == 2){
 let cellIdentifier = "cell3"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! thisCell
    print("add this after indexpath 2")
    return cell
}
else if indexPath.section == 0 && cell1 == true{
    let cellIdentifier = "cell1"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! SubCategoryTableViewCell
    cell.nameLabel.text = “cell1"
    cell.subNameLabel.text = ""
    return cell
} else  if indexPath.section == 2 && vally == true{
    let cellIdentifier = "cell2"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! SubCategoryTableViewCell
    cell.nameLabel.text = “Smiles"
    cell.subNameLabel.text = ""
    return cell
} else if indexPath.section == 1 {
    let cellIdentifier = "SubCategoryTableViewCell"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! SubCategoryTableViewCell
    cell.loading.hidden = false
    cell.loading.startAnimating()
    cell.nameLabel.text = subCat[indexPath.row].subCategoryName
    cell.subNameLabel.text = subCat[indexPath.row].subCategoryDesc
    return cell
}
let cell2: SubCategoryTableViewCell = tableView.dequeueReusableCellWithIdentifier("SubCategoryTableViewCell", forIndexPath: indexPath) as! SubCategoryTableViewCell
cell2.userInteractionEnabled = false
return cell2
}

以上代码将在indexPath.row的每个部分添加新的单元格 cell3 - > 2

答案 1 :(得分:1)

indexPath.row值旨在匹配您的基础支持数据数组的索引。提供额外的“虚拟”单元格代替行不会添加它们,它只是在相应的行显示不同的单元格。

您有两种选择:

1)考虑“in-between”单元格在subCat [row]和IndexPath.row中创建的渐进式偏移量。

2)在每个部分中使用实际部分和段和mat对条目到indexPath.row 0和1。

对于#1,您可以创建一对映射函数,并使用它们将indexPath.row转换为subCat []

中的索引
func indexFromRow(row:int) -> int?
{ return row % 3 == 2 ? nil : row - row/3 }

func rowFromIndex(index:Int) -> Int
{ return index + index/2 }

然后,当返回单元格时,您可以使用这些函数来建立行和索引之间的对应关系:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
  if let subCatIndex = indexFromRow(indexPath.row)
  {
     // build a SubCategoryTableViewCell cell, feed it with subCat[subCatIndex] data and return it
  }
  else
  {
     // build a thisCell cell and return it 
  }
}

您还需要调整为该部分返回的行数,以便为中间单元格腾出空间

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
 { return rowForIndex(subCat.count-1) + 1 }

在您收到IndexPath并且需要知道subCat []中的索引的代码中的任何地方,您都需要使用rowToIndex()函数

当你想知道给定索引下subCat []中项目的索引路径时,你必须使用indexToRow()来构建indexPath

对于#2,你必须使用类似的技术在subCat []中映射indexPath.row和索引,但是你还必须处理部分,我认为你不能使用可重用的单元格节标题。