添加自定義UITableView頭部控件方法


1.創建一個繼承UITableViewHeaderFooterView的類,擁有一個模型

2.重寫initWithStyle:reuseIdentifier:方法 
添加所有需要顯示的子控件(不需要設置子控件的數據和frame, 子控件要添加到contentView中) 
進行子控件一次性的屬性設置(有些屬性只需要設置一次, 比如字體\固定的圖片)

- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithReuseIdentifier:reuseIdentifier]) { //在這里向contentView添加控件 } return self; }

類方法實現LRHeaderFooterView的循環使用

+ (instancetype)heardFooterViewWithTableView:(UITableView *)tableView { NSString *ID = @"heardView"; LRHeaderFooterView *heardView = [tableView dequeueReusableCellWithIdentifier:ID]; if (heardView == nil) { heardView = [[LRHeaderFooterView alloc] initWithReuseIdentifier:ID]; } return heardView; }

4.重寫模型的setter方法,用來顯示數據特別注意這里不能設置內部控件的frame值,因為此時的頭部控件沒有寬高,同時我們應該將頭部控件的狀態覆蓋掉,應為頭部控件是循環利用的

- (void)setGroup:(LRFriendGroup *)group { _group = group; [self.btnView setTitle:group.name forState:UIControlStateNormal]; self.labelView.text = [NSString stringWithFormat:@"%d/%ld",group.online,group.friends.count]; //覆蓋頭部控件的狀態 }

5.在layoutSubviews設置內部控件的frame值 
這個方法是布局內部控件 當一個控件的frame值改變時就會調用這個方法

- (void)layoutSubviews { #warning 一定要記得寫 不然添加的button不能處理點擊事件 [super layoutSubviews]; self.btnView.frame = self.bounds; // self.labelView.frame = CGFloat labelH = self.bounds.size.height; CGFloat labelW = 80; CGFloat labelY = 0; CGFloat labelX = self.bounds.size.width - labelW - 10; self.labelView.frame = CGRectMake(labelX, labelY, labelW, labelH); }

6.在控制器中實現以下方法

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { LRHeaderFooterView *heardView = [LRHeaderFooterView heardFooterViewWithTableView:tableView]; heardView.delegate = self; heardView.group = self.groups[section]; return heardView; }

當我們刷新表格后會重新創建新的頭部控件,那么我們需要改變頭部控件需要調用一下方法

// 當一個控件已經被添加到父控件中就會調用該方法 - (void)didMoveToSuperview {
   }
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM