如何删除表视图ios的索引路径中的重复项,

时间:2015-12-18 11:12:47

标签: ios iphone uitableview custom-cell

当我增加第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];

    }

3 个答案:

答案 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];