Problem Statement : I want to dequeueReusableCell "PromotionCellIdentifier"
cells everywhere indexPath.row == 4 * n
but it only run dequeueReusableCell "PromotionCellIdentifier"
one time . I need a solution.
It have only dequeueReusableCell "PromotionCellIdentifier" one time because n == 1 not increment += 1
What I tried :
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
}
}
Required Output : I want to implement in this way
My Output : This is my result 1 & This is my result 2
I need:
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
Your approach won't work correctly because there is no guarantee the order the cells will be loaded. Cell 9 might come before cell 4 if the user is scrolling upwards. Instead, you should just check for multiples of 5 using the mod operator %
.
Change your check to:
if indexPath.row % 5 == 4 {
// special handling here for rows 4, 9, 14, ...
Also, this will replace the 4th, 9th, 14th, etc. cell with a promotional cell. I suspect you really just want to insert the promotional cell without losing any of the information cells. In that case, you'll want to shift the index paths to account for the promotional cells:
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
which would give you a table like this:
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