_ Xcode中生成UI控件的方式有storyboard和純代碼生成弦撩。當需要生成不定量個數(shù)的控件或控件的自定義程度比較高時幻捏,純代碼生成的控件就比較好榜旦。并且純代碼生成的控件砸捏,可控性比較好。畢竟都是自己寫的代碼爽冕,具體實現(xiàn)的細節(jié)都很清楚仇祭。
_ 在生成不定量的控件時,基本思路是使用for循環(huán)根據(jù)數(shù)據(jù)中需要顯示的個數(shù)動態(tài)生成相應的控件颈畸,并把控件加到對應的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. 很明顯每次調(diào)用這個方法時华弓,都會生成3個新的UIButton實例放在self.buttonArrray可變數(shù)組中。并且覆蓋在之前button之上困乒,如果多次調(diào)用,多可怕贰谣。娜搂。。
解決辦法:把可變數(shù)組變成可變字典吱抚,使用可唯一確定的字符串作為key百宇。當調(diào)用這個方法時,先判斷字典中是否存在一樣key的UIButton秘豹,如果沒有再生成新的UIButton携御。如果存在,直接修改相應屬性就可以了。避免重復生成相同功能的控件啄刹,而且可以在類的其它方法中使用涮坐。
_ 2.UIButton的位置不應該在for循環(huán)中設置,應在另一個方法中實現(xiàn)誓军。因為控件的位置是會變化的袱讹,如果每次刷新控件位置都要走一遍生成控件的代碼,就算按照1.中的修改了昵时。也會影響軟件的性能捷雕。把復雜的功能拆分成多個小功能模塊,有利于方法的復用壹甥。