【发布时间】:2013-12-27 14:47:11
【问题描述】:
我有一个UITableView,标题视图中有一个UISegmentedControl。它应该与 App Store 应用程序中的工作方式完全相同:当用户滚动时,标题中的标题会滚动到屏幕之外,但 segmentedControl 会粘在 navigationBar 下方。
当用户选择一个段时,标题下方的部分应该重新加载一个漂亮的UITableViewRowAnimation。然而,正如我所说的tableView:reloadSections:withRowAnimation:,标题视图也是动画的,我想阻止它,因为它看起来很糟糕。
这是我的代码:
- (void)selectedSegmentIndexChanged:(UISegmentedControl *)sender
{
int index = sender.selectedSegmentIndex;
if (index < self.oldIndex) {
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationLeft];
} else if (index > self.oldIndex) {
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationRight];
}
self.oldIndex = index;
}
有人知道如何在不重新加载标题本身的情况下重新加载标题下方的部分吗?
【问题讨论】:
-
也许你只会重新加载行...
-
你是对的,但是你有没有一个解决方案,在重新加载后的单元格数量与之前的数量不同时不会崩溃?
-
是的,有一个合适的解决方案,它称为
–deleteRowsAtIndexPaths:withRowAnimation:和–insertRowsAtIndexPaths:withRowAnimation:。您可以在 Apple 的个人圣经中找到更多信息:developer.apple.com/Library/ios/documentation/UIKit/Reference/… -
不幸的是,我在这里遇到了同样的错误:
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:]... -
有很多很好的例子来说明如何正确地做到这一点;或者,如果您阅读了我为您链接的文档,那也将帮助您实现您想要的。使用
UITableViews 是 iOS 开发中最复杂的部分之一,如果你发现很难处理它们,我不会怪你。
标签: ios objective-c uitableview