gpt4 book ai didi

iphone - UITableView deleteRowsAtIndexPaths 不删除行

转载 作者:行者123 更新时间:2023-12-03 21:20:09 24 4
gpt4 key购买 nike

我在IB中设计了UIView,并在其上设计了UITableView。在 View Controller 的 viewDidLoad 方法中,我初始化自定义 UITableViewContoller 并设置 dataSource 和 delegate:

- (void)viewDidLoad {
[super viewDidLoad];
...
GoodsTableController *goodsController = [[GoodsTableController alloc] init];
goodsController.data = [[orderData objectForKey:@"Result"] objectForKey:@"Items"];
self.gtc = goodsController;
[goodsController release];

goodsTable.delegate = self.gtc;
goodsTable.dataSource = self.gtc;
[goodsTable reloadData];}

对 GoodsTableController 感兴趣:

//in the header file
@interface GoodsTableController : UITableViewController {
NSMutableArray *data;
}

@property (nonatomic, retain) NSMutableArray *data;

//implementation

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"Current data size %d", [data count]);
return [data count];
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSLog(@"Deleting row at index %d", indexPath.row);
[self.tableView beginUpdates];

[self.data removeObjectAtIndex:indexPath.row];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

[self.tableView endUpdates];
[self.tableView reloadData];
}
}

对于调试,我使用了 NSLog,我看到数组已更改,其大小已更改,调用了 tableView:numberOfRowsInSection,但是表没有更新。行不隐藏。即日志:

2011-04-07 13:08:18.784 Test[32300:207] Current data size 2 //first call tableView:numberOfRowsInSection: by reloadData in View Controller after set data
2011-04-07 13:08:23.486 Test[32300:207] Current data size 2 //call after slide on row
2011-04-07 13:08:26.091 Test[32300:207] Deleting row at index 0
2011-04-07 13:08:26.093 Test[32300:207] Current data size 1 //call after endUpdate
2011-04-07 13:08:26.096 Test[32300:207] Current data size 1 //call after reloadData

最佳答案

研究了UITableView的删除、插入、重载机制。我正在 Github 上维护我的项目来解决这个问题。

https://github.com/VansonLeung/VanTableController

它包含一个工作单元测试。通常,为了使 UITableView 的单元格动画具有动画效果,我们必须执行以下操作:

[tableView_ beginUpdates];
[tableView_ deleteRowsAtIndexPaths: indexPathDelete withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView_ insertRowsAtIndexPaths: indexPathInsert withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView_ reloadRowsAtIndexPaths: indexPathReload withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView_ endUpdates];

我们必须确定删除行、插入行和重新加载行的indexPath 数组,这是一项非常令人讨厌的工作!我的项目工作基本上是一个用于生成这些索引路径的包装器,以使生活更轻松。

关于iphone - UITableView deleteRowsAtIndexPaths 不删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5577219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com