Tableview行删除ios

时间:2016-08-18 17:58:08

标签: ios objective-c iphone uitableview

我使用两个(canEditRowAtIndexPath和commitEditingStyle)方法来删除基于索引的行,每当我进入下一个视图并返回到表视图时,删除的行再次出现。 如何在表格视图中永久删除行?这对我很有帮助。

2 个答案:

答案 0 :(得分:1)

好像你只是从UI中删除数据,所以你遇到了问题。

您必须同时从源和用户界面删除数据。

只需参考此代码:

@interface ViewController ()

@property UITableView* tableView;
@property NSMutableArray* dataArray;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    _dataArray = [[NSMutableArray alloc] init];
    for (int i = 0; i<10; i++) {
        [_dataArray addObject:[NSString stringWithFormat:@"Test%d",i]];
    }

    _tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    _tableView.dataSource = self;
    _tableView.delegate = self;
    [self.view addSubview:_tableView];

    _tableView.editing = true;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return _dataArray.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"MyTableCell"];
    if (nil == cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyTableCell"];
    }
    cell.textLabel.text = [_dataArray objectAtIndex:indexPath.row];
    return cell;
}

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

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //Delete data from source
        [_dataArray removeObjectAtIndex:indexPath.row];
        //Delete row from UI
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
    }
}

@end

希望它可以帮到你。

答案 1 :(得分:0)

  1. 使用NSMutableArray作为UITableView's数据源。
  2. commitEditingStyle代表......

    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
           if (editingStyle == UITableViewCellEditingStyleDelete) {
               [datasourceArray removeObjectAtIndex:indexPath.row];
           }
    }