首页 > 代码库 > iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

一、项目文件结构和plist文件

 

二、实现效果

三、代码示例

1.没有使用配套的类,而是直接使用xib文件控件tag值操作

数据模型部分:

TXtg.h文件

 1 #import <Foundation/Foundation.h> 2  3 @interface TXTg : NSObject 4 /** 5  *  标题 6  */ 7 @property(nonatomic,copy)NSString *title; 8 /** 9  *  价格10  */11 @property(nonatomic,copy)NSString *price;12 /**13  *  图片14  */15 @property(nonatomic,copy)NSString *icon;16 /**17  *  购买人数18  */19 @property(nonatomic,copy)NSString *buyCount;20 -(instancetype)initWithDict:(NSDictionary *)dict;21 +(instancetype)tgWithDict:(NSDictionary *)dict;22 @end

 

TXtg.m文件

 1 #import "TXTg.h" 2  3 @implementation TXTg 4 -(instancetype)initWithDict:(NSDictionary *)dict; 5 { 6     if (self = [super init]) { 7         [self setValuesForKeysWithDictionary:dict]; 8     } 9     return self;10 }11 +(instancetype)tgWithDict:(NSDictionary *)dict12 {13     return [[self alloc]initWithDict:dict];14     15 }16 @end

 

主控制器

TXViewController.m文件

 1 #import "TXViewController.h" 2 #import "TXTg.h" 3 #import "TXTgCell.h" 4 @interface TXViewController ()<UITableViewDataSource> 5 @property (weak, nonatomic) IBOutlet UITableView *tableview; 6  7 @property(nonatomic ,strong)NSArray *tgs; 8  9 @end10 11 @implementation TXViewController12 13 - (void)viewDidLoad14 {15     [super viewDidLoad];16     //设置每一行cell的高度17     self.tableview.rowHeight =80;18   19 }20 /**21  *  隐藏状态栏22  */23 - (BOOL)prefersStatusBarHidden24 {25     return YES;26 }27 28 /**29  *  数据的懒加载30  */31 -(NSArray *)tgs32 {33     if (_tgs ==nil) {34         //初始化35         NSString *path = [[NSBundle mainBundle]pathForResource:@"tgs.plist" ofType:nil];36         //加载数组37         38         NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];39         40         //3.将dictArray里面的所有字典转成模型对象,放到新的数组中41         NSMutableArray *tgArray = [NSMutableArray array];42         43         for (NSDictionary *dict in dictArray) {44             //创建模型对象45             TXTg *tg = [TXTg tgWithDict:dict];46             47             // 加载模型对象倒数组中48             [tgArray addObject:tg];49             50         }51         _tgs = tgArray;52         53     }54     return _tgs;55 }56 #pragma mark --数据源方法57 /**58  *  一共多少行59  */60 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section61 {62     return self.tgs.count;63 }64 /**65  *  每一行显示怎样的cell66  */67 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath68 {69     //创建cell70     TXTgCell *cell = [TXTgCell cellWithTableView:tableView];71     72     //给cell传递模型数据73     cell.tg  = self.tgs[indexPath.row];74     return cell;75 }76 - (void)didReceiveMemoryWarning77 {78     [super didReceiveMemoryWarning];79     // Dispose of any resources that can be recreated.80 }81 82 @end

 

使用xib自定义的UItableviewcell

代码分析:

上面的代码通过使用xib文件中各个控件的tag值,完成对每个部分数据的赋值和刷新。但是,作为主控制器,它应该知道xib文件中各个控件的tag值,它知道的是不是太多了呢?

为了解决上面的问题,我们可以为自定义的cell设置一个配套的类,让这个类来操作这个xib,对外提供接口,至于内部的数据处理,外界不需要关心,也不用关心。

改造后的代码如下:

 

2.使用xib和对应的类完成自定义cell的数据展示

新建一个类,用来管理对应的xib文件

注意类的继承类,并把该类和xib文件进行关联

TXtgcell.h文件代码:

 1 #import <UIKit/UIKit.h> 2 @class TXTg; 3 @interface TXTgCell : UITableViewCell 4 /** 5  *  通过一个tableview来创建一个cell 6  */ 7 +(instancetype)cellWithTableView:(UITableView *)tableView; 8 /** 9  *  团购模型10  */11 @property(nonatomic ,strong)TXTg *tg;12 13 @end

 

 TXtgcell.m文件

 1 #import "TXTgCell.h" 2 #import "TXTg.h" 3 @interface TXTgCell() 4 @property (weak, nonatomic) IBOutlet UIImageView *iconView; 5 @property (weak, nonatomic) IBOutlet UILabel *titleView; 6 @property (weak, nonatomic) IBOutlet UILabel *priceView; 7 @property (weak, nonatomic) IBOutlet UILabel *buyCountView; 8  9 @end10 @implementation TXTgCell11 +(instancetype)cellWithTableView:(UITableView *)tableView12 {13     static NSString *ID =@"tg";14     TXTgCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];15     if (cell ==nil) {16         //从xib中加载cell17         cell = [[[NSBundle mainBundle] loadNibNamed:@"TXTgCell" owner:nil options:nil] lastObject];18     }19     return cell;20 }21 -(void)setTg:(TXTg *)tg22 {23     _tg = tg;24     25     //图片26     self.iconView.image = [UIImage imageNamed:tg.icon];27     self.titleView.text = tg.title;28     self.priceView.text = [NSString stringWithFormat:@"¥%@",tg.price];29     30     self.buyCountView.text = [NSString stringWithFormat:@"%@人已购买", tg.buyCount];31 }32 33 34 35 @end

 

主控制器

TXViewController.m文件

1 #import "TXViewController.h" 2 #import "TXTg.h" 3 #import "TXTgCell.h" 4 @interface TXViewController ()<UITableViewDataSource> 5 @property (weak, nonatomic) IBOutlet UITableView *tableview; 6  7 @property(nonatomic ,strong)NSArray *tgs; 8  9 @end10 11 @implementation TXViewController12 13 - (void)viewDidLoad14 {15     [super viewDidLoad];16     //设置每一行cell的高度17     self.tableview.rowHeight =80;18   19 }20 /**21  *  隐藏状态栏22  */23 - (BOOL)prefersStatusBarHidden24 {25     return YES;26 }27 28 /**29  *  数据的懒加载30  */31 -(NSArray *)tgs32 {33     if (_tgs ==nil) {34         //初始化35         NSString *path = [[NSBundle mainBundle]pathForResource:@"tgs.plist" ofType:nil];36         //加载数组37         38         NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];39         40         //3.将dictArray里面的所有字典转成模型对象,放到新的数组中41         NSMutableArray *tgArray = [NSMutableArray array];42         43         for (NSDictionary *dict in dictArray) {44             //创建模型对象45             TXTg *tg = [TXTg tgWithDict:dict];46             47             // 加载模型对象倒数组中48             [tgArray addObject:tg];49             50         }51         _tgs = tgArray;52         53     }54     return _tgs;55 }56 #pragma mark --数据源方法57 /**58  *  一共多少行59  */60 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section61 {62     return self.tgs.count;63 }64 /**65  *  每一行显示怎样的cell66  */67 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath68 {69     //创建cell70     TXTgCell *cell = [TXTgCell cellWithTableView:tableView];71     72     //给cell传递模型数据73     cell.tg  = self.tgs[indexPath.row];74     return cell;75 }76 - (void)didReceiveMemoryWarning77 {78     [super didReceiveMemoryWarning];79     // Dispose of any resources that can be recreated.80 }81 82 @end

 

四、推荐调整的项目文件结构

这是调整后的文件结构,完整的MVC架构。

注意:注意文件的命名规范。

 

iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局