UITableView 刷新头部时,头部每次都变为开始的状态,无法记录当前的状态
2015-12-21 15:29
459 查看
比如UITableView中头部视图为
点击按钮后,头部进行刷新,头部区域视图改变,并且下面出现cell,如图:
此功能的实现应该用,头部的刷新功能,利用代码:
但是实现过程中会出现一个问题,就是刷新后头部视图部分,开关按钮仍然为灰白按钮,那是因为每次刷新时,都会去重新初始化头部,此开关按钮也就会被重新初始化。由于此开关按钮是自己封装的,所以可以在封装里面的初始化中加一个判断:
需要定义一个bool值,
首先在控制器里面,每次打开开关按钮时将bool置为yes,刷新时,会去封装的代码中进行初始化,所以初始化代码中应:
这样操作后会发现还是无法实现,那是因为刚才点击的那个头部的开关按钮,点击完后开始刷新,刷新时重新初始化时,又初始化了一个开关按钮,不是刚才点击的那个头部开关按钮了。为了保证刚才点击的头部和等下刷新时的头部是同一个,可以在控制器中初始化头部的代码中这样来实现:
首先声明一个存放的字典:
如此就可以实现了。
点击按钮后,头部进行刷新,头部区域视图改变,并且下面出现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]]; } }
如此就可以实现了。
相关文章推荐
- 基于ROS_Arduino室内移动机器人SLAM实验测试
- 基于ROS_Arduino室内移动机器人SLAM实验测试
- 基于ROS_Arduino室内移动机器人SLAM实验测试
- 【PHP】PHP include()和require()方法的区别
- ios图片缩放,根据UIImageView Frame的尺寸,自动调整UIImage缩放,保证图片显示不变形
- UIMenuContnroller的使用
- Android BlueDroid(一):BlueDroid概述
- Hello : break continue return
- IOS开发之 ---- iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
- Ant_build.xml解释
- iOS开发日记53-CALayer和UIView
- 报错:finished with non-zero exit value 2
- android 蓝牙 bluetooth OPP文件传输
- ng-ui-router 官方示例的解读
- 简单易用的交互设计工具:摩客串串Chinco
- [leetcode] 52. N-Queens II 解题报告
- iOS隐藏UITableView下面多余的tableView的线条
- iOS UILable自动适应的写法
- iOS开发技巧 UIRefreshControl下拉刷新
- 使用NSOperation与NSOperationQueue实现多线程