在tableview
我有很多部分,在第一行的第一行我有一个删除按钮,我想在点击按钮后删除部分,但它崩溃请帮助我怎么办?这是代码......
//****** adding delete section button
CellButton *_sectionButton = (CellButton*)[cell viewWithTag:10];
_sectionButton.hidden = YES;
_sectionButton.indexPath = indexPath;
[_sectionButton addTarget:self action:@selector(sectionDeleteButton:) forControlEvents:UIControlEventTouchUpInside];
-(void)sectionDeleteButton: (id)sender
{
CellButton *_secbtn = (CellButton*)sender;
NSInteger sectionNumber = _secbtn.indexPath.section;
[self.tableView beginUpdates];
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionNumber] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];
[self.tableView reloadData];
}
编辑:错误消息是:
断言失败 - [UITableView _endCellAnimationsWithContext:],/ SourceCache / UIKit_Sim / UIKit-2380.17 / UITableView.m:1054 2013-07-04 04:25:15.921估计[9025:c07] ***终止应用程序未捕获的异常'NSInternalInconsistencyException',原因:'无效更新:无效的节数。更新后的表视图中包含的节数(2)必须等于更新前的表视图中包含的节数(2),加上或减去插入或删除的节数(0插入,1删除)
答案 0 :(得分:4)
我想numberOfSectionsInTableView:
会返回之前的部分数。您必须确保您告诉表视图的内容也发生在数据源中。也就是说,如果删除某个部分,则numberOfSectionsInTableView
也必须返回比之前少的数字。同样代表细胞和其他一切。这可能是你得到的错误中描述的。
答案 1 :(得分:1)
您必须使用numberOfScetionsInTableview:
委托方法
答案 2 :(得分:0)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
//#warning Potentially incomplete method implementation.
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
//#warning Incomplete method implementation.
// Return the number of rows in the section.
return [MLControl shared].arrBuyList.count;//1;//[MLControl shared].arrBuyList.count;
}
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
// [tableView beginUpdates];
NSLog(@"indexPath.row=%ld,indexPath.se=%ld",(long)indexPath.row,(long)indexPath.section);
[[MLControl shared].arrBuyList removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
// [tableView endUpdates];
} else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
答案 3 :(得分:0)
我遇到了这个问题,但原因与你的不同。
当我为tableView添加一个部分时,我使用这种方法重新加载数据,这也像你的一样崩溃了:
[tableView reloadRowsAtIndexPaths:[tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationNone];
为什么我使用此方法重新加载我的表?如果我只刷新单元格,这很好,但我忘记了我想要更改部分。有关详细信息:What is More reliable way to reload UITableView Data?
答案 4 :(得分:-2)
如果我正确理解了问题,您实际上甚至不必删除该行。如果表视图中的每个部分下面只有一行,您只需更新numberofsections变量并重新加载表,就会自动删除进程中的行
if editingStyle == UITableViewCellEditingStyle.Delete {
sectionCount -= 1
tableView.reloadData()
heightConstraint.constant -= 103
}