1. 程式人生 > >UITableView 重新整理頭部時,頭部每次都變為開始的狀態,無法記錄當前的狀態

UITableView 重新整理頭部時,頭部每次都變為開始的狀態,無法記錄當前的狀態

比如UITableView中頭部檢視為這裡寫圖片描述

點選按鈕後,頭部進行重新整理,頭部區域檢視改變,並且下面出現cell,如圖:
這裡寫圖片描述
此功能的實現應該用,頭部的重新整理功能,利用程式碼:

//重新整理表格檢視的分割槽的頭檢視
[_historyTableView reloadSections:[NSIndexSet indexSetWithIndex:index] withRowAnimation:UITableViewRowAnimationFade];

但是實現過程中會出現一個問題,就是重新整理後頭部檢視部分,開關按鈕仍然為灰白按鈕,那是因為每次重新整理時,都會去重新初始化頭部,此開關按鈕也就會被重新初始化。由於此開關按鈕是自己封裝的,所以可以在封裝裡面的初始化中加一個判斷:
需要定義一個bool值,
首先在控制器裡面,每次開啟開關按鈕時將bool置為yes,重新整理時,會去封裝的程式碼中進行初始化,所以初始化程式碼中應:

- (instancetype)initWithframe:(CGRect )frame{
    self = [super init];
    if (self) {
        [self setBackgroundImage:[UIImage imageNamed:@"gray"] forState:UIControlStateNormal];
        [self addTarget:self action:@selector(changeImageAndSlide:) forControlEvents:UIControlEventTouchUpInside];

        self
.frame = frame; self.tempFrame = frame; _sliderButton = [[UIButton alloc]initWithFrame:CGRectMake(2, 2, 27, 27)]; if (_isClicked== YES) { /** * 點選過後; */ [_sliderButton setBackgroundImage:[UIImage imageNamed:@"orange"] forState:UIControlStateNormal]; _sliderButton.frame
= CGRectMake(41, 2, 27, 27); } else { [_sliderButton setBackgroundImage:[UIImage imageNamed:@"white"] forState:UIControlStateNormal]; _sliderButton.frame = CGRectMake(2, 2, 27, 27); } [_sliderButton addTarget:self action:@selector(slide:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_sliderButton]; } return self; }

這樣操作後會發現還是無法實現,那是因為剛才點選的那個頭部的開關按鈕,點選完後開始重新整理,重新整理時重新初始化時,又初始化了一個開關按鈕,不是剛才點選的那個頭部開關按鈕了。為了保證剛才點選的頭部和等下重新整理時的頭部是同一個,可以在控制器中初始化頭部的程式碼中這樣來實現:
首先宣告一個存放的字典:

@property (nonatomic, strong) NSMutableDictionary *BigButtonDic; // 存放表頭名稱的陣列
//為每個分割槽新增頭檢視
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{

//開關按鈕的建立(每次將建立的開關按鈕,存到字典中,再次初始化時,如果已經有了,就不好初始化新的了,而是拿出之前的來使用)
 ButtonBig *switchBtn = [self.BigButtonDic objectForKey:[NSString stringWithFormat:@"%lu", (long)section]];
    if (switchBtn == nil) {
        switchBtn = [[ButtonBig alloc]initWithframe:CGRectMake(0, 0, 70, 31)];
        [self.BigButtonDic setObject:switchBtn forKey:[NSString stringWithFormat:@"%lu", (long)section]];
    }
}

如此就可以實現了。