UITableView删除和添加行

时间:2014-06-16 15:49:10

标签: objective-c uitableview data-management

我有一个包含序列号1,2 ...,n的NSMutableArray,并且有一个UITableView,它按顺序显示垂直上升的单元格。我如何在视觉上和数据中以及NSMutableArray中删除1和n之间的行,然后将数据中删除的单元格后面的所有单元格的值减1并在视觉上减1 firstResponder不会像reloadData方法调用那样辞职控制吗?


@interface TableController : UIViewController 

@property (nonatomic, retain) NSMutableArray *data;
@end


@implementation TableController
@synthesize data;

- (id)init
{
  if(self = [super init]) {
    data = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",nil];
  }
  return self;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  return [data count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  UITableViewCell *cell = [UITableViewCell new];
  [cell.textLabel setText:[data objectAtRow:indexPath.row]];
  return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  return 20;
}
@end

我如何删除第3行,然后将第4行和第5行分别变为3和4?

2 个答案:

答案 0 :(得分:1)

只需编辑视图模型,然后重新加载表格。

[data removeObjectAtIndex:2];
[tableView reloadData];

另一个选项是UITableView方法deleteRowsAtIndexPaths:withRowAnimation:。此方法仅 UI ,您还必须更新视图模型,以防以后再次加载单元格。此方法的优点是只有您指定的单元格才会更改。现有单元格未重新加载。

如果您要删除的单元格是您的第一响应者,那么您可以通过告知下一个单元格成为第一响应者来处理此情况。

答案 1 :(得分:0)

对于用户驱动的删除,您的[tableview dataSource]应实施方法tableView:commitEditingStyle:forRowAtIndexPath:

这是我的代码中的实现......

-(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
  if(editingStyle == UITableViewCellEditingStyleDelete)
  {
    [[STLocationsModel sharedModel] deleteLocationAtIndex: [indexPath row]];
    [tableView deleteRowsAtIndexPaths: @[indexPath] withRowAnimation: UITableViewRowAnimationLeft];
  }
}

要允许编辑,您还需要...

-(BOOL) tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
  return YES;
}

要使表格进入编辑模式以允许删除,您需要将其置于编辑模式。您可以将其放在viewDidLoad中,也可以使用按钮切换它:

[[self tableView] setEditing:YES animated:NO];

如果您还希望能够在编辑表格时进行选择(同样,这可以放在您的viewDidLoad ...

[[self tableView] setAllowsSelectionDuringEditing: YES];