1

让我们有两个可变数组,让我们有以下代码:

- (void)viewDidLoad
{
    NSMutableArray *A = [[NSMutableArray alloc] init];
    NSMutableArray *B = [[NSMutableArray alloc] init];
    // fill up A
    // B remains empty
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // ...
    if (...)
    {
        // fill up the cell with datas of an object from A
    }
    else
    {
        // fill up the cell with datas of an object from B
    }
    //...
    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (...)
    {
        // remove an object from A and put it in B
    }
    else
    {
        // remove an object from B and put in A
    }
    [tableView reloadData];
}

如果 [tableView reloadData] 被注释掉(// [tableView reloadData]),那么在“点击”之后,表格不会像预期的那样失效。如果当前单元格滚动并再次在屏幕中滚动,则调用“cellForRowAtIndexPath”并根据应该从哪个数组获取其内容来“绘制”单元格。但是如果 [tableView reloadData] 处于活动状态,而“cellForRowAtIndexPath”根本没有被调用(!)并且单元格从屏幕上删除!

反应:什么?

可以帮助我任何人如何动态地使 tableview 无效(而不是通过滚动单元格和:))!

提前致谢!

4

2 回答 2

0

您需要使用UITableView 方法 -deleteRowsAtIndexPath ... 来执行您想要实现的删除。不过,Apple 可能不会批准这种 UI 范例,因为它违反了 HIG。

考虑使用 UITableViewDatasource 的编辑属性以及-commitEditingStyle...进行删除。用户已经熟悉了 table view 的这种用法,并且没有被 Apple 拒绝的风险。

于 2011-06-24T15:17:21.253 回答
0

这是我的错.. 这是一次非常好的经历,对我来说这件事。方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [A count] + [B count];
}

仅包含[A 计数][B 计数]不.. 实际上使用 reloadData 时,它会变得很糟糕。无论如何,它可以向上滚动 - 向下滚动,而不会再次查询numberOfRowsInSection

谢谢大家的支持!

于 2011-06-27T10:55:16.017 回答