问题记录
这周在做项目的时候遇到了几个问题,记录一下:
在写UITableView的Footer的时候,可能是系统自带函数写错,导致footer不能正常显示,在这里记录一下,以后这种函数不要再写错:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{}
ios系统自带有翻书效果:UIPageViewController 之后有机会要研究一下!
项目中有一个从后台拉取数据显示的页面。从后台拉取的数据models需要按照其所属的课文分类。
- 一开始是用NSMutableDictionary类型的sections存放这些models,键值就是课文名;然后用NSMutableArray类型的sortedSections存放这些models的课文名。这样导致的后果就是如果课文名是重复的,那么后面传送过来的数据就会插到前面来:因为我们是根据sortedSections里面的内容去sections中查找的。
- 后来的解决办法是sortedSections不变,使用sortedSections中的序号作为sections的key。例如:
self.sortedSections[0]=@"识字(一)";
相应于sections中,以“识字(一)”为标签的数据对应的key由原来的“识字(一)”改为“0”。这样即使内容是有重复的,但是序号是不会重复的。
在做课本目录的时候,有一个阴影要叠加。但是我明明都把初始化view的函数写好了,阴影仍然不显示。后来发现是初始化的顺序有问题。应该先init UITableView,再init阴影。否则阴影就被tableview覆盖了,就显示不出来了。
[view removeFromSuperview];
这个命令只是把view从它的上一层superview中移除,而view本身并没有被销毁,只是看不见了,如果再add进去的话还是有的。如果要销毁这个view的话,直接置空即可:view = nil;
- (void)removeFromSuperview
在添加下拉菜单的时候,每个选项都是相同的,而我是一个一个控件写的,后来被峰峰批评了= =,说应该用for循环的。于是我改为了for循环,源码如下。这样如果还要有新的选项加进去的话,只需要往数组里添加字符串就行了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21NSArray *subject = @[@"语文课本",@"数学课本",@"英语课本"];
for(int i=0; i<[subject count]; i++){
//分割线
UIView *line = [[UIView alloc] init];
line.frame = DF_FRAME(0, now_H, width, self.line_height);
line.backgroundColor = [UIColor colorWithHexString:@"#d0d0d0"];
[self.titleView addSubview:line];
now_H = DF_NowHeight(line);
//按钮
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitle:subject[i] forState:(UIControlStateNormal)];
if([self.navTitle isEqual:subject[i]])
[button setTitleColor:kThemeTitleColor forState:UIControlStateNormal];//当前的字体颜色要不一样
else
[button setTitleColor:[UIColor colorWithHexString:@"#343434"] forState:UIControlStateNormal];
[button setTitleColor:kThemeTitleColor forState:UIControlStateHighlighted];
button.frame = CGRectMake(0, now_H, width, self.button_height);
[self.titleView addSubview:button];
[button addTarget:self action:@selector(selectSubject:) forControlEvents:UIControlEventTouchUpInside];
now_H = DF_NowHeight(button);//每次循环都要更新一下高度
}