这是我在这个很棒的网站上的第一个问题。我真的经常搜索,但找到了下一个问题的答案。
我有一个包含9个单元格的表视图。其中一个单元格中有一个开关按钮。当切换按钮值改变时,我想删除表格视图的2行。我写了下一段代码:
- (IBAction)switchValueChanged:(id)sender {
NSLog(@"%@", ([switch isOn]) ? @"ON" : @"OFF");
NSArray *deleteIndexPaths = [NSArray arrayWithObjects:
[NSIndexPath indexPathForRow:1 inSection:0],
[NSIndexPath indexPathForRow:2 inSection:0],
nil];
UITableView *tableView = (UITableView *)self.view;
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationFade];
// I Have to change the number of rows in the section here.
[tableView endUpdates];
}
当我运行这个时,我遇到了与该部分中的行数有关的问题 - 这个数字已被更改,所以我需要更改它。我真的找不到我如何改变它,但我知道我必须改变它(见代码)。
我该怎么办?如何调用方法numberOfRowsInSection:NSInteger
并设置行?
非常感谢:)
答案 0 :(得分:2)
表格中的行数在您的
中- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
您需要此选项以匹配表
中的新行数----编辑
这意味着您需要跟踪表格中的行数。
从此设置开始9并在每次更改开关时删除2
- (IBAction)switchValueChanged:(id)sender {
NSLog(@"%@", ([switch isOn]) ? @"ON" : @"OFF");
// We are going to delete 2 rows
numberOfRows -= 2;
...
并且在您的numberOfRowsInSection中,而不是每次返回9,返回新的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return numberOfRows;
}
答案 1 :(得分:0)
您应该从数据源而不是表格单元格中删除数据,然后只刷新表格视图。至少这是我做设计的方式。
答案 2 :(得分:0)
您还必须从表视图的数据源中删除数据。数据源是保存表视图上显示的实际数据的任何容器。只删除行只删除行的可视项,当重新加载tableview时 - 它将要绘制9-2行....但由于行数仍然返回9,它将引发不一致异常并告诉你为什么。仔细查看日志。