如何在特定 indexpath.row 上显示自定义 tableviewcell
Posted
技术标签:
【中文标题】如何在特定 indexpath.row 上显示自定义 tableviewcell【英文标题】:How to display custom tableviewcell on specific indexpath.row 【发布时间】:2018-03-30 06:28:05 【问题描述】:我创建了 tableview 和两个不同的自定义单元格。 假设cell1和cell2。
现在我想像下面的模式在表格视图中添加单元格
单元格1
单元格1
单元格1
单元格2
单元格1
单元格1
单元格1
单元格2
等等,我有显示在 cell1 中的数据计数,但我不知道 cell2 是否计数,因为它应该是动态计数,我的意思是说在每 3 个 cell1 数据之后,第 4 个单元格将是 cell2
这是我的表格视图代码
#pragma mark - TableView Delegate Methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section
return [arrayRecipeCategoryNAME count];
//return 22;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath
return 175;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
if((indexPath.row % 3) == 0)
HomeTableViewCell2 *cell2 = [tableView dequeueReusableCellWithIdentifier:@"Cell2" forIndexPath:indexPath];
return cell2;
else
HomeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.lblRecipeCategory.text = [arrayRecipeCategoryNAME objectAtIndex:indexPath.row];
cell.lblRecipeCategory.font = FONT_COMFORTAA_BOLD(28);
cell.imgRecipeCategory.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@",[arrayRecipeCategoryImage objectAtIndex:indexPath.row]]];
return cell;
【问题讨论】:
可能通过数据而不是行来检测。例如:arrayRecipeCategoryNAME[indexPath.row].cell2 == "some data",然后返回 HomeTableViewCell2 否则相反,这样做的好处是有一天服务器端改变了逻辑.你赢了。 首先它应该是if (indexPath.row + 1) % 3 == 0
,因为0 % N
总是0。但问题是你的arrayRecipeCategoryNAME
,它只适用于cell1
。你需要尝试不同的方法
你可以这样做......if ((indexPath.row+1) % 4 == 0 // return cell 2 else // return cell 1
@staticVoidMan 是的,我不知道 cell2 的计数,因为它完全取决于能被 3 整除的 cell1 计数,这就是我现在卡住的地方
@TejasPatel cell2
什么时候出现?为什么?它是链接到自己的数据源还是从arrayRecipeCategoryNAME
获取?它像标题吗?
【参考方案1】:
首先,必须调整numberOfRowsInSection:
中返回的行数以显示多余的单元格。
然后在cellForRowAtIndexPath:
中,您需要调整数组索引以匹配要用于数据源数组arrayRecipeCategoryNAME
和arrayRecipeCategoryImage
的正确序列
以下内容适用于您当前的设计:
#define INTERVAL 4
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section
NSInteger count = arrayRecipeCategoryNAME.count;
NSInteger numberOfUnmappedRows = count / INTERVAL;
NSInteger totalNumberOfRows = (count + numberOfUnmappedRows);
return totalNumberOfRows;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
if(((indexPath.row + 1) % INTERVAL) == 0)
HomeTableViewCell2 *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell2" forIndexPath:indexPath];
return cell;
else
NSInteger numberOfUnmappedCellsBeforeCurrent = indexPath.row / INTERVAL;
//Use following as the index for your datasource arrays
NSInteger translatedIndex = indexPath.row - numberOfUnmappedCellsBeforeCurrent;
HomeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.lblRecipeCategory.text = arrayRecipeCategoryNAME[translatedIndex];
//...
cell.imgRecipeCategory.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@", arrayRecipeCategoryImage[translatedIndex]]];
return cell;
【讨论】:
【参考方案2】:你可以这样使用它。
var Index = [indexpath.Row] + 1
if Index%4 == 0
// return cell 2
else
// return cell 1
【讨论】:
这让我像跟随 cell1 cell1 cell1 cell1 on top cell2 其重叠cell1的数据【参考方案3】:如果固定每四个单元格为 cell2 则尝试使用以下代码,它可能会有所帮助。
Int *row = indexPath.row + 1
if(row % 4 == 0)
HomeTableViewCell2 *cell2 = [tableView dequeueReusableCellWithIdentifier:@"Cell2" forIndexPath:indexPath];
return cell2;
else
HomeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.lblRecipeCategory.text = [arrayRecipeCategoryNAME objectAtIndex:indexPath.row];
cell.lblRecipeCategory.font = FONT_COMFORTAA_BOLD(28);
cell.imgRecipeCategory.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@",[arrayRecipeCategoryImage objectAtIndex:indexPath.row]]];
return cell;
【讨论】:
以上是关于如何在特定 indexpath.row 上显示自定义 tableviewcell的主要内容,如果未能解决你的问题,请参考以下文章
无法在 uicollectionview、UICollectionView 的特定 indexPath.row 处为单元格设置标题
如何获取当前正在显示的tableView的indexPath.row?
我想在 tableview 或任何其他替代方案之后的下一个视图上获取 indexpath.row
如何在Objective C中的didFinishLoading中获取IndexPath.row