好的代码应该是简洁、精炼的,这样不仅可以减少包的大小还可以提高内存的使用率和减轻后期维护负担。
如下示例,介绍了 自定义UIView 实现重用,已满足复杂的UI 布局
#import <UIKit/UIKit.h> @interface MarketTopItemView : UIView{ //code NSString *strCode; //品种名称 IBOutlet UILabel *labName; //当前价 IBOutlet UILabel *labCurrentPic; //涨跌 IBOutlet UILabel *labUpDown; //涨跌幅 IBOutlet UILabel *labUpDownRate; //背景线 IBOutlet UIImageView *imgLine; //保留小数位 NSInteger intDecimal; } //////////////////////////////////////////// -(id) initViewWithFrame:(CGRect) frame; -(void) initData:(NSDictionary *) dicData; @end
MarketTopItemView.m
#import "MarketTopItemView.h" @implementation MarketTopItemView -(id) initViewWithFrame:(CGRect) frame{ self = [super initWithFrame:frame]; if (self) { // Custom initialization } // [S] 初始化子控件 if(!labName){ labName = [[UILabel alloc] initWithFrame:CGRectMake(10.f, 6.f, 66.f, 20.f)]; [labName setFont:[UIFont systemFontOfSize:13.f]]; [labName setTextAlignment:NSTextAlignmentLeft]; [labName setTextColor:[UIColor whiteColor]]; [self addSubview:labName]; } if(!labCurrentPic){ labCurrentPic = [[UILabel alloc] initWithFrame:CGRectMake(10.f, 26.f, 85.f, 21.f)]; [labCurrentPic setFont:[UIFont systemFontOfSize:19.f weight:bold]]; [labCurrentPic setTextAlignment:NSTextAlignmentLeft]; [labCurrentPic setTextColor:[UIColor whiteColor]]; [self addSubview:labCurrentPic]; } if(!labUpDown){ labUpDown = [[UILabel alloc] initWithFrame:CGRectMake(10.f, 45.f, 45.f, 20.f)]; [labUpDown setFont:[UIFont systemFontOfSize:11.f]]; [labUpDown setTextAlignment:NSTextAlignmentLeft]; [labUpDown setTextColor:[UIColor whiteColor]]; [self addSubview:labUpDown]; } if(!labUpDownRate){ labUpDownRate = [[UILabel alloc] initWithFrame:CGRectMake(55.f, 45.f, 55.f, 20.f)]; [labUpDownRate setFont:[UIFont systemFontOfSize:11.f]]; [labUpDownRate setTextAlignment:NSTextAlignmentLeft]; [labUpDownRate setTextColor:[UIColor whiteColor]]; [self addSubview:labUpDownRate]; } if(!imgLine){ imgLine = [[UIImageView alloc] initWithFrame:CGRectMake(10.f, 65.f, 95.f, 2.f)]; [self addSubview:imgLine]; } [self setBackgroundColor:[UIColor clearColor]]; // [B] 初始化子控件 return self; } -(void) initData:(NSDictionary *) dicData{ if (dicData && dicData.count > 0) { float upDownRate = 0.f; //code strCode = dicData[@"Code"]; //保留位数 intDecimal = [dicData[@"Decimal"] intValue]; //名称 labName.text = dicData[@"Name"]; //当前价 if (intDecimal == 2) labCurrentPic.text = [NSString stringWithFormat:@"%.2f",[dicData[@"Last"] floatValue]]; else labCurrentPic.text = [NSString stringWithFormat:@"%.4f",[dicData[@"Last"] floatValue]]; //涨跌 if (intDecimal == 2) labUpDown.text =[NSString stringWithFormat:@"%.2f",[dicData[@"UpDown"] floatValue]]; else labUpDown.text =[NSString stringWithFormat:@"%.4f",[dicData[@"UpDown"] floatValue]]; //涨跌幅(涨跌 / 昨收 * 100) upDownRate = [dicData[@"UpDown"] floatValue] / [dicData[@"LastClose"] floatValue] * 100; labUpDownRate.text = [NSString stringWithFormat:@"%.2f",upDownRate]; labUpDownRate.text = [labUpDownRate.text stringByAppendingString:@"%"]; //涨跌背景图 CGRect rect = imgLine.frame; float fwidth = abUpDown.frame.size.width; fwidth += [AFUtils get_width_for_string:abUpDownRate.text withSize:11.F andWidth:labUpDownRate.frame.size.width]; rect.size.width = fwidth; if ([dicData[@"UpDown"] floatValue] > 0) //红涨 imgLine.image = [UIImage imageNamed:@"market_updark_bg.png"]; else if ([dicData[@"UpDown"] floatValue] < 0) //绿跌 imgLine.image = [UIImage imageNamed:@"market_downdark_bg.png"]; else //白平 imgLine.image = [UIImage imageNamed:@"market_nomraldark_bg.png"]; imgLine.frame = rect; } } @end
if (excodeListArray && [excodeListArray count] > 0) { float x = 0.f; NSDictionary *dicTemp; MarketTopItemView *itemView; CGRect rect = CGRectMake(0, 0, 106.5f, 73.f); //先清空之前绑定 for (id sender in [self.topView subviews]) { //背景图,不能移除 if (!([sender isKindOfClass:[UIImageView class]] && ((UIImageView *)sender).tag == 555)) [sender removeFromSuperview]; } //重新绑定 for (int i = 0,len = (int)[excodeListArray count]; i < len; i++) { //初始化位置 x = i * 106.5f; rect.origin.x = x; itemView = [[MarketTopItemView alloc] initViewWithFrame:rect]; //获取数据 dicTemp = [excodeListArray objectAtIndex:i]; [itemView initData:dicTemp]; [self.topView addSubview:itemView]; } dicTemp = nil; itemView = nil; }