1. tableview sectionHeaderView 作为筛选框,点击实现弹出框
难点:因为在tableview滑动的时候,sectionheaderview是能够停滞在顶部,从而为弹出框的定位以及父控件的选择增加了困难;
解决关键:采用坐标转换,筛选按钮点击时,需要做下面两件事:
1).创建和屏幕一样或者在tableview的父控件一样大的view,颜色设置为透明
2) . 通过sectionHeaderView上面的点击按钮的frame 进行坐标转化,转化成蒙板上的坐标
CGRect newRect = [self.view convertRect:sectionHeaderView.selectBtn.frame fromView:self.sectionheaderView];
3). 在蒙板上创建弹出框,并且在蒙板上添加手势,使蒙板从父控件移除
问题1:会出现手势冲突,因为弹出框很有可能是tableview,cell 有点击动作
解决:使用手势的代理方法,具体操作如下:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}
问题2: 反复的点击创建,会造成性能差解决:使用懒加载的方式
2. 在基类的view上添加搜索框或者其他一些共有的控件,而遇到不同界面有的需要有得不需要,在具体界面布局的时候就容易出现frame的设置问题
解决方案:重写基类添加相同控件的方法,在界面中自己重新添加,通过代理/通知 实现界面跳转或者值传递
3. 在设置界面从本地选择图片,添加头像,要实现其他界面的时时更新/同步
问题:通常的做法是在设置里选择完图片后,保存沙盒,然后通知其他界面从沙盒中去,这样会造成反复的读取沙盒,极大的影响性能
解决方案:
1. 创建一个全局的单例对象,将图片或者个人信息保存到这个单例对象中,当用户改变个人信息(头像或者其他信息)时,发通知或者在viewwillappear中调用方法,更新数据,首先从单例对象中获取,如果获取不到在读取沙盒
2. 保存沙盒尽量放到子线程中进行