当我增加第1项的数量时,第7项的数量增加....每次都会发生这种情况 因为表视图cellforrowatindexPath在滚动时重新加载。我无法找到解决方案。我如何解决这个问题。我搜索了很多但找不到任何解决方案Plz帮助。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *simpleTableIdentifier = @"MenuSelectCell";
ItemSelectTableViewCell *cell = (ItemSelectTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ItemSelectTableViewCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
if ([[[self.restaurantModal.dataArray objectAtIndex:indexPath.row] objectForKey:@"data" ] count] >0) {
[cell.selectFlavorBtn addTarget:self action:@selector(selectFlavorMethod:) forControlEvents:UIControlEventTouchUpInside];
[cell.addToCartBtn addTarget:self action:@selector(addToCart:) forControlEvents:UIControlEventTouchUpInside];
[cell.fullQtyPlussBtn addTarget:self action:@selector(updateQuantity:) forControlEvents:UIControlEventTouchUpInside];
[cell.fullQtyMinusBtn addTarget:self action:@selector(updateQuantity:) forControlEvents:UIControlEventTouchUpInside];
}
答案 0 :(得分:1)
滚动后,tableView不会创建另一个单元格。它将重用已经创建的单元格。
如果单元对象是可重用的 - 典型情况 - 您可以为其重新分配 故事板中的标识符(任意字符串)。在运行时, 表视图将单元对象存储在内部队列中。当表 视图要求数据源配置要显示的单元格对象, 数据源可以通过发送来访问排队的对象 dequeueReusableCellWithIdentifier:消息到表视图,传递 在重用标识符中。数据源设置单元格的内容 和返回之前的任何特殊属性。这种细胞的重用 对象是一种性能增强,因为它消除了 细胞创造的开销。
更多详情here。所以你的代码应该是这样的:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *simpleTableIdentifier = @"MenuSelectCell";
ItemSelectTableViewCell *cell = (ItemSelectTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ItemSelectTableViewCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
if ([[[self.restaurantModal.dataArray objectAtIndex:indexPath.row] objectForKey:@"data" ] count] >0) {
[cell.selectFlavorBtn addTarget:self action:@selector(selectFlavorMethod:) forControlEvents:UIControlEventTouchUpInside];
[cell.addToCartBtn addTarget:self action:@selector(addToCart:) forControlEvents:UIControlEventTouchUpInside];
[cell.fullQtyPlussBtn addTarget:self action:@selector(updateQuantity:) forControlEvents:UIControlEventTouchUpInside];
[cell.fullQtyMinusBtn addTarget:self action:@selector(updateQuantity:) forControlEvents:UIControlEventTouchUpInside];
}
}
答案 1 :(得分:0)
我认为这背后的原因是你的dequed单元格仍然具有先前索引的参数。您可以在重用单元格之前重置,也可以实现prepareForReuse委托方法。
答案 2 :(得分:0)
试
ItemSelectTableViewCell *cell = (ItemSelectTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath];