目标c - 删除表视图的行

时间:2011-10-21 16:33:04

标签: objective-c xcode uitableview

这是我在这个很棒的网站上的第一个问题。我真的经常搜索,但找到了下一个问题的答案。

我有一个包含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并设置行?

非常感谢:)

3 个答案:

答案 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,它将引发不一致异常并告诉你为什么。仔细查看日志。