让我们有两个可变数组,让我们有以下代码:
- (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”根本不会被调用(!),并且该单元格将从屏幕上删除!
反应:WHUT?
可以帮助我任何人如何动态地使tableview无效(而不是通过滚动单元格和in:))!
提前致谢!
答案 0 :(得分:0)
你需要使用UITableView method -deleteRowsAtIndexPath ...来执行你想要实现的删除。 Apple可能不会批准这种UI范例,因为它违反了HIG。
考虑使用编辑属性以及-commitEditingStyle... of the UITableViewDatasource进行删除。用户已经熟悉表视图的这种用法,并且不会被Apple拒绝。
答案 1 :(得分:0)
这是我的错......对我这件事来说,这是一次非常好的经历。 方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [A count] + [B count];
}
只包含 [A count] 和 [B count] 而不是..实际上,对于reloadData,它更糟糕。无论如何它的工作原因是向上滚动 - 向下滚动,而 numberOfRowsInSection 不再被查询。
谢谢大家的支持!