如何在swift表格视图中每隔三个单元格显示AdCell

nwsw7zdq  于 2023-02-07  发布在  Swift
关注(0)|答案(2)|浏览(134)

我必须显示Adcell每三个细胞后。为此,我已经采取了两个原型细胞和设计adcell在一个和正常细胞在其他

**代码:**仅在显示前三行AdCell后使用我的代码,从显示第四行数据的JobsCell丢失第三行
**如何为每个单元格显示Adcell而不丢失JobsCell数据。**请指导

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return categoryData?.result?.categoryData?.count ?? 0
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

var returnCell: UITableViewCell!

if indexPath.row == 3  {
    returnCell = tableView.dequeueReusableCell(withIdentifier: "AdCell", for: indexPath) as! AdCell
}

else {
    returnCell = tableView.dequeueReusableCell(withIdentifier: "JobsCell", for: indexPath) as! JobsCell
    returnCell.selectionStyle = .none
}
return returnCell
}
juzqafwq

juzqafwq1#

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
   var count = categoryData?.result?.categoryData?.count ?? 0
   return count + count / 3
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

var returnCell: UITableViewCell!

if indexPath.row % 3 == 0 && indexPath.row != 0  {
    returnCell = tableView.dequeueReusableCell(withIdentifier: "AdCell", for: indexPath) as! AdCell
}

else {
    returnCell = tableView.dequeueReusableCell(withIdentifier: "JobsCell", for: indexPath) as! JobsCell
    returnCell.selectionStyle = .none
}
return returnCell
}
7ajki6be

7ajki6be2#

第一个问题:在您的示例中,func(numberOfItemsInSection)返回的行数比需要的少。因此,首先,添加缺少的单元格。

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

   let n = categoryData?.result?.categoryData?.count ?? 0

   //for example here 10 jobs
   //3j 1a 3j 1a 3j 1a 1j(last) Here 3ads
   //10/3 = 3(and 1)
   //so will 11/3=3(2), then 12/3=4(0)
   //So generic formula: num = j + j/3

   let num = n + n/3   //n is Int so division rounds the number down

   return num
}

第二个问题:在indexPath中添加额外单元格时,如果使用数据[indexPath. row],则会丢失第四个作业。因此,可以创建"jumpDownNumber"这样的变量。它会将步骤保存到跳过的indexPath.row编号。

var jumpDownNumber = 0 //and reload it before tableView.reloadData()

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

   var returnCell: UITableViewCell!
   
   //after 3 jobCell is every fourth AD cell

   if (indexPath.row+1) % 4 == 0 {
      returnCell = tableView.dequeueReusableCell(withIdentifier: "AdCell", for: indexPath) as! AdCell
      jumpDownNumber += 1
   } else {
    returnCell = tableView.dequeueReusableCell(withIdentifier: "JobsCell", for: indexPath) as! JobsCell

    //here you can use data[indexPath.row-jumpDownNumber]
    returnCell.selectionStyle = .none
   }

   return returnCell
}

相关问题