您的位置:首页 > 产品设计 > UI/UE

UITableView 刷新头部时,头部每次都变为开始的状态,无法记录当前的状态

2015-12-21 15:29 459 查看
比如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]];
}
}


如此就可以实现了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: