利用Xib進行實現
應用場景:像團購網站的列表數據顯示,新聞列表顯示等(由於該類的顯示的數據單元格內容格式相同)
(1)主控制器文件,在文件中實現了自己自定義的代理,加載數據,
復制代碼
1 #import "SLViewController.h"
2 #import "SLTgDatas.h"
3 #import "SLTableViewCell.h"
4 #import "SLFooterView.h"
5 #import "SLHeaderView.h"
6
7 @interface SLViewController ()<UITableViewDataSource,UITableViewDelegate,SLFooterViewDelegate>
8
9 @property (weak, nonatomic) IBOutlet UITableView *tableview;
10
11 @property (nonatomic,strong) NSMutableArray *arrayM;
12
13 @end
14
15 @implementation SLViewController
16
17 -(void)loadMoreData
18 {
19 NSLog(@"=======");
20 SLTgDatas *da=[[SLTgDatas alloc] init];
21 da.title=@"西紅柿雞蛋";
22 da.price=@"12";
23 da.buyCount=@"56";
24 da.icon=@"2c97690e72365e38e3e2a95b934b8dd2";
25 [self.arrayM addObject:da];
26 [self.tableview reloadData];
27
28 }
29
30
31 #pragma mark -解析plist數據文件
32 -(NSMutableArray *)arrayM
33 {
34 if (_arrayM==nil) {
35 NSString *fullpath=[[NSBundle mainBundle] pathForResource:@"tgs" ofType:@"plist"];
36 NSArray *array=[NSArray arrayWithContentsOfFile:fullpath];
37 NSMutableArray *arr=[NSMutableArray arrayWithCapacity:array.count];
38 for (NSDictionary *dict in array) {
39 SLTgDatas *data=[SLTgDatas tgDataWithDiectionary:dict];
40 [arr addObject:data];
41 }
42
43 _arrayM=arr;
44 }
45
46 return _arrayM;
47 }
48
49 - (void)viewDidLoad
50 {
51 [super viewDidLoad];
52 // self.tableview.dataSource=self;
53
54 UINib *nib=[UINib nibWithNibName:@"SLFooterView" bundle:nil];
55 SLFooterView *footerview=[[nib instantiateWithOwner:nil options:nil] firstObject];
56 self.tableview.tableFooterView=footerview;
57
58 footerview.delegate=self;
59
60 SLHeaderView *headerview=[SLHeaderView headerWithView];
61 self.tableview.tableHeaderView=headerview;
62
63 }
64
65 #pragma mark -填充數據進行顯示
66 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
67 {
68 return 1;
69 }
70
71 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
72 {
73 return self.arrayM.count;
74 }
75
76 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
77 {
78 SLTableViewCell *cell=[SLTableViewCell cellWithTabelViewCell:tableView];
79 SLTgDatas *data=self.arrayM[indexPath.row];
80 cell.data=data;
81 return cell;
82 }
83
84 #pragma mark -設置狀態欄隱藏
85 -(BOOL)prefersStatusBarHidden
86 {
87 return YES;
88 }
89
90 @end
復制代碼
(2)該文件是字典轉對象模型文件
復制代碼
1 #import <Foundation/Foundation.h>
2
3 #import "SLGlobalCode.h"
4
5 @interface SLTgDatas : NSObject
6
7 @property (nonatomic,copy) NSString *title;
8 @property (nonatomic,copy) NSString *icon;
9 @property (nonatomic,copy) NSString *price;
10 @property (nonatomic,copy) NSString *buyCount;
11
12 @property (nonatomic,strong,readonly) UIImage *image;
13
14 //SLTg(tg)
15 -(instancetype)initWithTgDirectionary:(NSDictionary *)dict;
16
17 +(instancetype)tgDataWithDiectionary:(NSDictionary *)dict;
18 @end
復制代碼
復制代碼
1 #import "SLTgDatas.h"
2
3 @interface SLTgDatas ()
4 {
5 UIImage *_image;
6 }
7 @end
8
9 @implementation SLTgDatas
10
11 -(UIImage *)image
12 {
13 if (_image==nil) {
14 _image=[UIImage imageNamed:self.icon];
15 }
16 return _image;
17 }
18 /**
19 * 對代碼進行抽取,成為其他地方也可以用這個方法
20 */
21 //SLTgRetrun(tg)
22 -(instancetype)initWithTgDirectionary:(NSDictionary *)dict
23 {
24 if (self=[self init]) {
25 [self setValuesForKeysWithDictionary:dict];
26 }
27 return self;
28 }
29 +(instancetype)tgDataWithDiectionary:(NSDictionary *)dict
30 {
31 return [[self alloc] initWithTgDirectionary:dict];
32 }
33 @end
復制代碼
(3)此文件是自定義cell對象,通過xib進行設計後,通過連線進行相關,方便控制器調用
復制代碼
1 #import <UIKit/UIKit.h>
2
3 #import "SLTgDatas.h"
4
5 @interface SLTableViewCell : UITableViewCell
6
7 @property (nonatomic,strong) SLTgDatas *data;
8
9 +(instancetype)cellWithTabelViewCell:(UITableView *)table;
10
11 @end
復制代碼
復制代碼
#import "SLTableViewCell.h"
@interface SLTableViewCell()
@property (weak, nonatomic) IBOutlet UIImageView *cellImage;
@property (weak, nonatomic) IBOutlet UILabel *celltitle;
@property (weak, nonatomic) IBOutlet UILabel *cellprice;
@property (weak, nonatomic) IBOutlet UILabel *cellbuycount;
@end
@implementation SLTableViewCell
+(instancetype)cellWithTabelViewCell:(UITableView *)table
{
static NSString *str=@"cell";
SLTableViewCell *cell=[table dequeueReusableCellWithIdentifier:str];
if (cell==nil) {
cell=[[[NSBundle mainBundle] loadNibNamed:@"SLTgPlistView" owner:nil
options:nil] firstObject];
}
return cell;
}
-(void)setData:(SLTgDatas *)data
{
_data=data;
self.cellbuycount.text=data.buyCount;
self.cellImage.image=data.image;
self.cellprice.text=data.price;
self.celltitle.text=data.title;
}
@end
復制代碼
(4)是底部加載更多選項
復制代碼
1 #import <UIKit/UIKit.h>
2
3 @protocol SLFooterViewDelegate <NSObject>
4
5 -(void)loadMoreData;
6
7 @end
8
9 @interface SLFooterView : UIView
10
11 @property (nonatomic,weak) id<SLFooterViewDelegate> delegate;
12 @end
復制代碼
復制代碼
1 #import "SLFooterView.h"
2 @interface SLFooterView ()
3
4 @property (weak, nonatomic) IBOutlet UIButton *clieckbt;
5 @property (weak, nonatomic) IBOutlet UIView *jiazai;
6
7
8
9 @end
10 @implementation SLFooterView
11
12 -(void)setDelegate:(id<SLFooterViewDelegate>)delegate
13 {
14 _delegate=delegate;
15 }
16
17 - (IBAction)btnclick {
18 self.clieckbt.hidden=YES;
19 self.jiazai.hidden=NO;
20
21 // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0
22 // * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
23 //
24 // });
25 //
26 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
27 if ([self.delegate respondsToSelector:@selector(loadMoreData)])
28 {
29 [self.delegate loadMoreData];
30 }
31 self.clieckbt.hidden=NO;
32 self.jiazai.hidden=YES;
33 });
34
35
36 }
37
38 @end
復制代碼
以上就是利用xib進行設計的tableView進行顯示的列表數據
綜上所述:在自定義UITabelViewCell的時候,有兩種方式,要根據不同的場景進行利用。