UITableview插入/删除

时间:2016-07-12 11:10:15

标签: ios uitableview

我在该加号按钮中有一个部分基本tableview,它将在tableview中添加新项目 当我尝试从tableview添加或删除该部分并重新加载该tableview时,它将多次闪烁旧记录,然后添加或删除该部分。
这是代码。

 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    SymbolTableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if ([selectIndexPath containsObject:[NSNumber numberWithInt:(int)indexPath.section]])
    {
        [selectSymbol removeObject:cell.lblsymbol.text];
        [selectIndexPath removeObject:[NSNumber numberWithInt:(int)indexPath.section]];
    }
    else
    {
        NSString *strr = cell.lblsymbol.text;
        [selectSymbol addObject:strr];
        [selectIndexPath addObject:[NSNumber numberWithInt:(int)indexPath.section]];
    }
     [tblDetail reloadData];
}

问题是什么?

4 个答案:

答案 0 :(得分:0)

您可以重新加载已删除/添加的单元格 你不会重新加载所有表。 请尝试以下代码

[self.tableView deleteRowsAtIndexPaths:@[ indexPath ] withRowAnimation:UITableViewRowAnimationFade];

[self.tableView insertRowsAtIndexPaths:@[ indexPath ] withRowAnimation:UITableViewRowAnimationFade];

答案 1 :(得分:0)

尝试使用可能对您有帮助的代码

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath
{
  SymbolTableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
  if ([selectIndexPath containsObject:[NSNumber numberWithInt:(int)indexPath.section]])
  {
    [tblDetail beginUpdates];
    [selectSymbol removeObject:cell.lblsymbol.text];
    [selectIndexPath removeObject:[NSNumber numberWithInt:(int)indexPath.section]];
    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    [tableView endUpdates];
  }
  else
  {
    NSString *strr = cell.lblsymbol.text;
    [tblDetail beginUpdates];
    [selectSymbol addObject:strr];
    [selectIndexPath addObject:[NSNumber numberWithInt:(int)indexPath.section]];
    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    [tableView endUpdates];
  }
}

答案 2 :(得分:0)

for inserting row in tableview

   - (void)insertNewObject:(id)sender
{
    if (!arrayForTableContent) {
        arrayForTableContent = [[NSMutableArray alloc] init];
    }
    NSInteger count = [arrayForTableContent count];
    NSString *strTobeAdded = [NSString stringWithFormat:@"%d",count+1];
    [arrayForTableContent insertObject:strTobeAdded atIndex:count];
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:count inSection:0];
    [self.tableViewForScreen insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}

答案 3 :(得分:0)

我没有编写所有代码,也没有在调试器中测试它,但我会给你一个如何正确实现它的建议。我们假设您有一个数据源,如下所示: NSMutableArray * data = @ [@" First",@" Second",@" Third"];

  • 数据源:在numberOfRowsInSection中,返回data.count;在cellForRowAtIndexPath中,您将使用数组中的相应索引配置单元格;
  • 委托:在didSelectRowAtIndexPath中,从数据数组中删除对象,假设你需要这样的东西:[data removeObjectAtIndex(indexPath.row)];然后在表视图上调用reloadData。表格视图现在可以顺利返回两个项目。