我使用两个(canEditRowAtIndexPath和commitEditingStyle)方法来删除基于索引的行,每当我进入下一个视图并返回到表视图时,删除的行再次出现。 如何在表格视图中永久删除行?这对我很有帮助。
答案 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)
NSMutableArray
作为UITableView's
数据源。在commitEditingStyle
代表......
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
[datasourceArray removeObjectAtIndex:indexPath.row];
}
}