IOS开发随笔1

问题记录

这周在做项目的时候遇到了几个问题,记录一下:

  • 在写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
    21
    NSArray *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);//每次循环都要更新一下高度
    }