OC编码注意事项之生成控件

_ Xcode中生成UI控件的方式有storyboard和纯代码生成。当需要生成不定量个数的控件或控件的自定义程度比较高时,纯代码生成的控件就比较好。并且纯代码生成的控件,可控性比较好。毕竟都是自己写的代码,具体实现的细节都很清楚。
_ 在生成不定量的控件时,基本思路是使用for循环根据数据中需要显示的个数动态生成相应的控件,并把控件加到对应的view中。下面的代码存在一些问题,一起分析一下。

- (void)buildButtonWithArray:(NSArray *)infoArray
{
   for (int i = 0; i < infoArray.count; i++)
   {
       UIButton *button = [UIButton new];
       NSDictionary *infoDic = infoArray[i];
   
       if (infoDic[@"title"])
       {
           [button setTitle:infoDic[@"title"] forState:UIControlStateNormal];
       }
       else
       {
           NSLog(@"title is nil.");
       }
       
       [self.buttonArrray addObject: button];
       
       [self.view addSubview:button];
       
       CGFloat x, y, w, h;
       w = 50.0;
       h = 50.0;
       x = i *w;
       y = 0.0;
       
       button.frame = CGRectMake(x, y, w, h);
   }
}

_ 1. 很明显每次调用这个方法时,都会生成3个新的UIButton实例放在self.buttonArrray可变数组中。并且覆盖在之前button之上,如果多次调用,多可怕。。。
解决办法:把可变数组变成可变字典,使用可唯一确定的字符串作为key。当调用这个方法时,先判断字典中是否存在一样key的UIButton,如果没有再生成新的UIButton。如果存在,直接修改相应属性就可以了。避免重复生成相同功能的控件,而且可以在类的其它方法中使用。
_ 2.UIButton的位置不应该在for循环中设置,应在另一个方法中实现。因为控件的位置是会变化的,如果每次刷新控件位置都要走一遍生成控件的代码,就算按照1.中的修改了。也会影响软件的性能。把复杂的功能拆分成多个小功能模块,有利于方法的复用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容