如何刷新特定部分?

时间:2016-11-08 11:53:16

标签: ios objective-c uitableview uiviewcontroller

UITableView上有一个ViewController它有n个部分,我的第一部分总是显示我的愿望清单产品(仅限基础)在SettingsController上启用愿望清单选项每当我在DetailViewController我的<{1}}我的愿望清单中添加产品时触发NSNotificatiion到我的ViewController,它将获取 Wishlist 记录。

我的numberOfRowsInSection:始终返回1因为,UITableView + UICollectionView组合可以生成水平+垂直滚动。

所以,我正在以下面的方式重新加载我的部分,

if (isWishListSectionReloadRequires) {
    NSArray *deleteIndexPaths = [NSArray arrayWithObjects:
                                 [NSIndexPath indexPathForRow:0 inSection:0],
                                 nil];
    NSArray *insertIndexPaths = [NSArray arrayWithObjects:
                                 [NSIndexPath indexPathForRow:0 inSection:0],
                                 nil];
    [tableView beginUpdates];
    [tableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationNone];
    [tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationNone];
    [tableView endUpdates];
} else {
    [tableView reloadData];
}

但是,我正面临着崩溃,

  

断言失败 - [UITableView _endCellAnimationsWithContext:],/ SourceCache / UIKit_Sim / UIKit-2380.17 / UITableView.m:1054 2016-11-04 04:25:15.921估计[9025:c07] ***终止应用程序未捕获的异常'NSInternalInconsistencyException',原因:'无效更新:无效的节数。更新后的表视图中包含的节数(10)必须等于更新前的表视图中包含的节数(10),加上或减去插入或删除的节数(插入1个,1个)删除)

谁能告诉我可能是什么原因?任何想法都将不胜感激!!

3 个答案:

答案 0 :(得分:1)

您可以使用UITableView的reloadSections方法。

目标C

NSRange range = NSMakeRange(0, 1);
NSIndexSet *section = [NSIndexSet indexSetWithIndexesInRange:range];                                     
[self.tableView reloadSections:section withRowAnimation:UITableViewRowAnimationNone];

<强>夫特

tableView.reloadSections(NSIndexSet(index: 2), withRowAnimation: .None)

答案 1 :(得分:0)

您可以重新加载Collection View,因为您只需更新心愿单。

[collectionView reloadData];

如果你需要水平和垂直滚动,一旦签出RTTwoDimmensionalScroll

,就会有很多第三方lib

答案 2 :(得分:0)

使用以下方式重新加载,不要忘记重新加载开始更新和结束更新中的特定部分,以便页眉和页脚也得到更新。

[tableView beginUpdates];
NSIndexSet *section = [NSIndexSet indexSetWithIndex:0];                                     
[self.tableView reloadSections:section withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];