An easy way to hide or show section in a tableview
传统的删除UITableView的section,往往是通过删除数据源,然后reloadSections的方法完成。但是如果想隐藏、显示多个section的时候,重复的addObject和removeObject并附带各种逻辑判断,是不是整个人都不开心了。
那么,这里之所以用hide而不是delete,就是把需要隐藏的section中的cell高度设置为0,需要显示时再还原为初始高度。那么设置一个defaultHeight是必须的咯。在category添加这么一个属性,咋办?对,用一下runtime。
- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
API用了NSIndexSet类型,仔细研究下,发现NSIndexSet用来实现我们的功能最好不过了。而我们需要不断的增加或减少section,所有选择其子类:NSMutableIndexSet,能addIndex,removeIndex,并能判断index是否存在:containsIndex,是不是觉得很完美?
关于AdoTableViewHeaderFooterView.h的写法,是我不想在controller中过多的增加代码,想出来的“歪招”。给其增加了一个属性:headerSection,让其记住自己属于UITableView中的那个section,更简单的完成自己的使用。
UITableView *superView = (UITableView *)self.superview;
[superView ado_hideSection:self.headerSection];