如何检查索引路径行 == 4 * n x n += 1



>问题陈述:我想在任何地方取消排队可重用单元格"PromotionCellIdentifier"单元格indexPath.row == 4 * n但它只运行一次取消队列可重用单元格"PromotionCellIdentifier"一次。我需要一个解决方案。

它只有一次取消排队可重用单元格"促销单元格标识符",因为 n == 1 不递增 += 1

我试过什么:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let homeSection = Section(rawValue: indexPath.section)!
var n = 1
switch homeSection {
case .Promotion:
let cell = tableView.dequeueReusableCell(withIdentifier: "",
for: indexPath)
return cell
case .Information:
if indexPath.row == 4 * n{
let cell = tableView.dequeueReusableCell(withIdentifier: "PromotionCellIdentifier",
for: indexPath)
n += 1
return cell
}
let cell = tableView.dequeueReusableCell(withIdentifier: "MenuItemCellIdentifier",
for: indexPath) as! MenuTableViewCell

let index = indexPath.row != 0 ? indexPath.row - 1 : 0
let menu = menuItems[index]

let number = menu.like
let stringNumber = numberdecimal(number: number)
cell.configure(imageName: menu.imageName, title: menu.name, detail: menu.details, like: stringNumber,nameLike: menu.likeImage)
return cell
}
}

所需输出:我想以这种方式实现

我的输出:这是我的结果 1 和这是我的结果 2

我需要:

adjust row 
adjust row 
adjust row 
adjust row 
promotion row
adjust row 
adjust row 
adjust row 
adjust row 
promotion row
adjust row 
adjust row 
adjust row 
adjust row 

您的方法将无法正常工作,因为无法保证单元格的加载顺序。 如果用户向上滚动,单元格 9 可能位于单元格 4 之前。相反,您应该只使用 mod 运算符%检查 5 的倍数。

将您的支票更改为:

if indexPath.row % 5 == 4 {
// special handling here for rows 4, 9, 14, ...

此外,这将促销单元替换第 4、9、14 等单元格。我怀疑您真的只想插入促销单元格而不会丢失任何信息单元格。 在这种情况下,您需要移动索引路径以考虑促销单元格:

if indexPath.row % 5 == 4 {
// special handling here for rows 4, 9, 14, ...
return cell
}
// compute new adjustedRow to account for the insertion of the
// promotional cells
let adjustedRow = indexPath.row - indexPath.row / 5

这会给你一个这样的表格:

0:  adjusted row 0
1:  adjusted row 1
2:  adjusted row 2
3:  adjusted row 3
4:  promotional cell
5:  adjusted row 4
6:  adjusted row 5
7:  adjusted row 6
8:  adjusted row 7
9:  promotional cell
10: adjusted row 8
11: adjusted row 9
12: adjusted row 10
13: adjusted row 11
14: promotional cell

最简单的方法是使用indexPath.row.isMultiple(of: 4)而不是indexPath.row == 4 * n

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let homeSection = Section(rawValue: indexPath.section)!
switch homeSection {
case .Promotion:
let cell = tableView.dequeueReusableCell(withIdentifier: "",
for: indexPath)
return cell
case .Information:
if indexPath.row.isMultiple(of: 4) {
let cell = tableView.dequeueReusableCell(withIdentifier: "PromotionCellIdentifier",
for: indexPath)
return cell
}
let cell = tableView.dequeueReusableCell(withIdentifier: "MenuItemCellIdentifier",
for: indexPath) as! MenuTableViewCell

let index = indexPath.row != 0 ? indexPath.row - 1 : 0
let menu = menuItems[index]

let number = menu.like
let stringNumber = numberdecimal(number: number)
cell.configure(imageName: menu.imageName, title: menu.name, detail: menu.details, like: stringNumber,nameLike: menu.likeImage)
return cell
}

}

每次调用cellForRowAt时,n的值都会重置回1。您需要在函数范围之外声明n才能正常工作。

var n = 1
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//...
}

更好的方法:更好的方法是使用indexPath.row % 4 == 0或最新的 swift 语法indexPath.row.isMultiple(of: 4),这更具可读性。

相关内容

  • 没有找到相关文章

最新更新