UITableView-獲取最上面懸停的"SectionView"
阿新 • • 發佈:2019-02-18
Demo地址(有拓展喲)(PS:今天有點累.明天更新一下部落格)
我一開始的思路和這一篇文章差不多.大致思路是通過顯示組頭.將要顯示組頭的UITableView代理方法來判斷最上層是哪個組頭.思路是沒有錯誤的,但是試玩了一下.在兩個組切換之間.不鬆手的上下滑動會有BUG(具體表現為當前顯示組頭一直+1,+1,+1).
{
//使用currentTopSectionViewCount記錄當前顯示的最上層的Section.在控制器中初始化為0.
long _currentTopSectionViewCount;
}
最主要的是所有UIScrollView以及繼承與UISCrollView子控制元件的已經滾動的代理.
以及當前顯示的”Cells”.通過- (UITableViewCell *)visibleCells;
來呼叫.
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (scrollView == self.tableView) {
NSArray <ZGAccountsBookDataTableViewCell *> *cellArray = [self.tableView visibleCells];
//cell的section的最小值
long cellSectionMINCount = LONG_MAX;
for (int i = 0; i < cellArray.count ; i++) {
ZGAccountsBookDataTableViewCell *cell = cellArray[i];
long cellSection = [self.tableView indexPathForCell:cell].section;
if (cellSection < cellSectionMINCount) {
cellSectionMINCount = cellSection;
}
}
_currentTopSectionViewCount = cellSectionMINCount;
NSLog (@"當前懸停的組頭是:%ld",_currentTopSectionViewCount);
}
}
我們可以使用UITableView的
- (nullable UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section NS_AVAILABLE_IOS(6_0);
方法來取到組頭或者是組尾試圖.
一般來說,小夥伴們一半肯定是建立一個UIView然後直接返回作為每一組的組頭或者組尾試圖.那麼,大家看到上面的這個方法有沒有想到那個返回值是
UITableViewHeaderFooterView
.而UITableViewHeaderFooterView中第一個(一般最重要的東西都是放在最上面的)方法就是
- (instancetype)initWithReuseIdentifier:(nullable NSString *)reuseIdentifier NS_DESIGNATED_INITIALIZER;
看到
Identifier
是否能夠聯想到UITableView的Indentifier呢.registerclass的時候不知道大家是否注意到了有個headerFooter:
既然註冊View和Cell的方式一樣,那麼取的時候也應該和Cell的方式一樣:
/*
*這裡只是拿HeaderView舉個例子.如果大家要看footerView那麼可以重寫另外一個方法
*viewForFooterInSection
*/
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
TableViewSectionHeaderView *headerView = (TableViewSectionHeaderView *)[tableView dequeueReusableHeaderFooterViewWithIdentifier:tableHeaderViewID];
//結合上面的_currentTopSectionViewCount.我們可以在這裡對最上面的組頭做一些設定.
return headerView;
}