首页 > 代码库 > ios基础控件 之展示团购数据 UITableViewCell <代理,xib封装view>

ios基础控件 之展示团购数据 UITableViewCell <代理,xib封装view>

技术分享
 
1.主控制器:
  1 //  2 //  ViewController.m  3 //  GroupPurchase  4 //  5 //  Created by hellovoidworld on 14/12/3.  6 //  Copyright (c) 2014年 hellovoidworld. All rights reserved.  7 //  8   9 #import "ViewController.h" 10 #import "GroupPurchase.h" 11 #import "GroupPurchaseCell.h" 12 #import "FooterRefreshView.h" 13 #import "HeaderAdView.h" 14  15  16 @interface ViewController () <FooterRefreshViewDelegate> 17  18 @property(nonatomic, strong) NSArray *groupPurchases; 19  20 @end 21  22 @implementation ViewController 23  24 - (void)viewDidLoad { 25     [super viewDidLoad]; 26     // Do any additional setup after loading the view, typically from a nib. 27     28     // 创建尾部控件 29     FooterRefreshView *footerView = [FooterRefreshView footerRrefreshViewWithDelegate:self]; 30     31     // 设置尾部控件 32     self.tableView.tableFooterView = footerView; 33     34     35     //设置头部广告 36     HeaderAdView *adView = [self genAdView]; // 手动拼装广告图片数据 37     self.tableView.tableHeaderView = adView; 38 } 39  40 - (void)didReceiveMemoryWarning { 41     [super didReceiveMemoryWarning]; 42     // Dispose of any resources that can be recreated. 43 } 44  45 #pragma mark - 状态栏 46 - (BOOL)prefersStatusBarHidden { 47     return YES; 48 } 49  50  51 #pragma mark - 数据方法 52 /** 延迟数据加载到model */ 53 - (NSArray *) groupPurchases { 54     if (nil == _groupPurchases) { 55         NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"tgs.plist" ofType:nil]]; 56         57         NSMutableArray *mdictArray = [NSMutableArray array]; 58         for (NSDictionary *dict in dictArray) { 59             GroupPurchase *groupPurchase = [GroupPurchase groupPurchaseWithDictionary:dict]; 60             [mdictArray addObject:groupPurchase]; 61         } 62         63         _groupPurchases = mdictArray; 64     } 65     66     return _groupPurchases; 67 } 68  69 /** section数 */ 70 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 71     return 1; 72 } 73  74 /** 行数 */ 75 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 76     return self.groupPurchases.count; 77 } 78  79 /** 内容 */ 80 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 81     82     // 1.创建cell 83     GroupPurchaseCell *cell = [GroupPurchaseCell groupPurchaseCellWithTableView:self.tableView]; 84  85     // 2.给cell传递model数据 86     cell.groupPurchase = self.groupPurchases[indexPath.row]; 87     88     return cell; 89 } 90  91 /** 行高 */ 92 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 93     return 80; 94 } 95  96 /** 实现FooterRefreshViewDelegate协议 */ 97 - (void)footerRefreshViewClickedFooterRefreshButton:(FooterRefreshView *)footerRefreshView { 98     //增加团购记录 99     GroupPurchase *groupPurchase = [GroupPurchase groupPurchase];100     groupPurchase.icon = @"M2Mini.jpg";101     groupPurchase.title = @"增加用例";102     groupPurchase.price = @"88";103     groupPurchase.buyCount = @"32";104    105     // 加入新数据106     NSMutableArray *marray = [NSMutableArray arrayWithArray:self.groupPurchases];107     [marray addObject:groupPurchase];108     self.groupPurchases = marray;109    110     // 刷新数据111     [self.tableView reloadData];112 }113 114 // 配置一些头部广告的数据115 - (HeaderAdView *) genAdView {116     HeaderAdView *adView = [HeaderAdView headerAdView];117    118     NSMutableArray *adImages = [NSMutableArray array];119     for (int i=0; i<5; i++) {120         [adImages addObject:[NSString stringWithFormat:@"ad_%02d", i]];121     }122    123     adView.ads = adImages;124    125     return adView;126 }127 128 @end
 
2.自定义cell
技术分享
 
 1 // 2 //  GroupPurchaseCell.m 3 //  GroupPurchase 4 // 5 //  Created by hellovoidworld on 14/12/3. 6 //  Copyright (c) 2014年 hellovoidworld. All rights reserved. 7 // 8  9 #import "GroupPurchaseCell.h"10 #import "GroupPurchase.h"11 12 @implementation GroupPurchaseCell13 14 // 界面被初始化的时候调用 awakeFromNib15 - (void)awakeFromNib {16     // Initialization code17 }18 19 - (void)setSelected:(BOOL)selected animated:(BOOL)animated {20     [super setSelected:selected animated:animated];21 22     // Configure the view for the selected state23 }24 25 /** 自定初始化的类方法,传入model数据 */26 + (instancetype) groupPurchaseCellWithTableView:(UITableView *) tableView {27    28     static NSString *ID = @"groupPurchase";29    30     // 从缓存池寻找31     GroupPurchaseCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];32    33     // 若缓存池没有,则创建一个34     if (nil == cell) {35         cell = [[[NSBundle mainBundle] loadNibNamed:@"GroupPurchaseCell" owner:nil options:nil] lastObject];36     }37    38     return cell;39 }40 41 /** 加载Model数据,初始化界面 */42 - (void) setGroupPurchase:(GroupPurchase *) groupPurchase {43     if (nil != groupPurchase) {44         self.titleLabel.text = groupPurchase.title;45         self.iconImageView.image = [UIImage imageNamed:groupPurchase.icon];46         self.priceLabel.text = [NSString stringWithFormat:@"¥%@", groupPurchase.price];47         self.buyCountLabel.text = [NSString stringWithFormat:@"%@人已经购买", groupPurchase.buyCount];48     }49    50     _groupPurchase = groupPurchase;51 }52 53 @end54  
 
3.底部加载按钮
技术分享
 
 1 // 2 //  FooterRefreshView.h 3 //  GroupPurchase 4 // 5 //  Created by hellovoidworld on 14/12/3. 6 //  Copyright (c) 2014年 hellovoidworld. All rights reserved. 7 // 8  9 #import <UIKit/UIKit.h>10 11 @class FooterRefreshView;12 13 // 定义delegate协议14 @protocol FooterRefreshViewDelegate <NSObject>15 16 @optional17 - (void) footerRefreshViewClickedFooterRefreshButton:(FooterRefreshView *) footerRefreshView;18 19 @end20 21 @interface FooterRefreshView : UIView22 23 // 带代理的初始化方法24 + (instancetype) footerRrefreshViewWithDelegate:(id<FooterRefreshViewDelegate>) delegate;25 26 @end

 

 1 // 2 //  FooterRefreshView.m 3 //  GroupPurchase 4 // 5 //  Created by hellovoidworld on 14/12/3. 6 //  Copyright (c) 2014年 hellovoidworld. All rights reserved. 7 // 8  9 #import "FooterRefreshView.h"10 11 @interface FooterRefreshView()12 /** 底部的“加载更多”按钮 */13 @property (weak, nonatomic) IBOutlet UIButton *footerRefreshButton;14 15 /** 加载动画图标 */16 @property (weak, nonatomic) IBOutlet UIActivityIndicatorView *loadingImage;17 18 /** 代理 */19 @property(nonatomic, weak) id<FooterRefreshViewDelegate> delegate;20 21 /** “加载更多”按钮点击事件 */22 - (IBAction)onFooterRefreshButtonClicked;23 24 25 @end26 27 @implementation FooterRefreshView28 29 #pragma mark - 初始化30 31 /** 初始化方法 */32 + (instancetype) footerRrefreshViewWithDelegate:(id<FooterRefreshViewDelegate>) delegate {33     FooterRefreshView *footerRefreshView = [[[NSBundle mainBundle] loadNibNamed:@"FooterRefreshView" owner:nil options:nil] lastObject];34    35     if (nil != delegate) {36         footerRefreshView.delegate = delegate;37     }38    39     return footerRefreshView;40 }41 42 // xib控件的初始化调用方法43 - (void)awakeFromNib {44     self.loadingImage.hidden = YES;45 }46 47 48 #pragma mark - action49 /** “加载更多”按钮点击事件 */50 - (IBAction)onFooterRefreshButtonClicked {51     NSString *footerButtonTitle = self.footerRefreshButton.currentTitle;52    53     // 显示正在加载54     self.loadingImage.hidden = NO;55     [self.footerRefreshButton setTitle:@"拼命加载中..." forState:UIControlStateNormal];56    57     // 暂时禁止按钮事件58     self.footerRefreshButton.userInteractionEnabled = NO;59    60     // 模拟延迟61     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{62         // 通知代理发生了点击事件63         if ([self.delegate respondsToSelector:@selector(footerRefreshViewClickedFooterRefreshButton:)]) {64             [self.delegate footerRefreshViewClickedFooterRefreshButton:self];65         }66        67         // 恢复按钮状态68         self.footerRefreshButton.userInteractionEnabled = YES;69         self.loadingImage.hidden = YES;70         [self.footerRefreshButton setTitle:footerButtonTitle forState:UIControlStateNormal];71     });72 73 }74 75 @end
 
4.头部广告
技术分享
 
 1 // 2 //  HeaderAdView.h 3 //  GroupPurchase 4 // 5 //  Created by hellovoidworld on 14/12/3. 6 //  Copyright (c) 2014年 hellovoidworld. All rights reserved. 7 // 8  9 #import <UIKit/UIKit.h>10 11 @interface HeaderAdView : UIView12 // 广告组13 @property(nonatomic, strong) NSArray *ads;14 15 + (instancetype) headerAdView;16 17 @end
 
  1 //  2 //  HeaderAdView.m  3 //  GroupPurchase  4 //  5 //  Created by hellovoidworld on 14/12/3.  6 //  Copyright (c) 2014年 hellovoidworld. All rights reserved.  7 //  8   9 #import "HeaderAdView.h" 10  11 #define AD_VIEW_WIDTH 300 12 #define AD_VIEW_HEIGHT 120 13  14 // 遵守UIScrollViewDelegate监控滚动事件 15 @interface HeaderAdView() <UIScrollViewDelegate> 16  17 /** scrollView控件 */ 18 @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; 19  20 /** 页码 */ 21 @property (weak, nonatomic) IBOutlet UIPageControl *pageControl; 22  23 /** 计时器 */ 24 @property(nonatomic, weak) NSTimer *timer; 25  26 @end 27  28 @implementation HeaderAdView 29  30 #pragma mark - 初始化方法 31 // 初始化headerAdView 32 + (instancetype) headerAdView { 33     return [[[NSBundle mainBundle] loadNibNamed:@"HeaderAdView" owner:nil options:nil] lastObject]; 34 } 35  36 // 当控件从nib初始化 37 - (void)awakeFromNib { 38     self.scrollView.scrollEnabled = YES; // 开启滚动 39     self.scrollView.pagingEnabled = YES; // 开启翻页模式 40     self.scrollView.delegate = self;// 设置代理 41 } 42  43 /** 设置ads */ 44 - (void) setAds:(NSArray *)ads { 45     if (nil != ads) { 46         CGFloat adImageWidth = AD_VIEW_WIDTH; 47         CGFloat adImageHeight = AD_VIEW_HEIGHT; 48         CGFloat adImageY = 0; 49         50         for (int i=0; i<ads.count; i++) { 51             // 计算当前图片的水平坐标 52             CGFloat adImageX = i * adImageWidth; 53             54             UIImageView *adImageView = [[UIImageView alloc] initWithFrame:CGRectMake(adImageX, adImageY, adImageWidth, adImageHeight)]; 55             adImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@", ads[i]]]; 56          57             [self.scrollView addSubview:adImageView]; 58         } 59         60         // 设置滚动范围 61         self.scrollView.contentSize = CGSizeMake(ads.count * AD_VIEW_WIDTH, 0); 62         63         self.pageControl.numberOfPages = ads.count; // 总页数 64         self.pageControl.pageIndicatorTintColor = [UIColor blackColor]; // 其他页码颜色 65         self.pageControl.currentPageIndicatorTintColor = [UIColor redColor]; // 当前页码颜色 66         67         // 添加自动轮播 68         [self addTimer]; 69     } 70     71     _ads = ads; 72 } 73  74 #pragma mark - 滚动事件 75 // 滚动动作监控,当滚动超过图片的一半的时候转变页码 76 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { 77     CGFloat scrollViewWidth = self.scrollView.frame.size.width; 78     int page = (self.scrollView.contentOffset.x + 0.5 * scrollViewWidth) / scrollViewWidth; 79     self.pageControl.currentPage = page; 80 } 81  82 // 手动拖动广告图片轮播的时候,暂时销毁自动轮播器 83 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { 84     [self.timer invalidate]; 85     self.timer = nil; 86 } 87  88 // 手动拖动结束,从新加上自动轮播器 89 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { 90     [self addTimer]; 91 } 92  93 // 添加计时器 94 - (void) addTimer { 95     self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES]; 96     97     // 计时器分享主线程资源 98     [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; 99 }100 101 // 下一张图片动作102 - (void) nextImage {103     int page = 0;104     // 如果是当前页码在最后一页,从新回到第一页105     if (self.pageControl.currentPage == self.ads.count - 1) {106         page = 0;107     }108     else {109         page = self.pageControl.currentPage + 1;110     }111    112     // 滚动图片,带动画效果113     [self.scrollView setContentOffset:CGPointMake(page * AD_VIEW_WIDTH, 0) animated:YES];114 }115 @end
 
5.model
 1 // 2 //  GroupPurchase.h 3 //  GroupPurchase 4 // 5 //  Created by hellovoidworld on 14/12/3. 6 //  Copyright (c) 2014年 hellovoidworld. All rights reserved. 7 // 8  9 #import <Foundation/Foundation.h>10 11 @interface GroupPurchase : NSObject12 13 /** 图片 */14 @property(nonatomic, copy) NSString *icon;15 16 /** 标题 */17 @property(nonatomic, copy) NSString *title;18 19 /** 已经购买人数 */20 @property(nonatomic, copy) NSString *buyCount;21 22 /** 价格 */23 @property(nonatomic, copy) NSString *price;24 25 //初始化方法26 - (instancetype) initWithDictionary:(NSDictionary *) dictionary;27 + (instancetype) groupPurchaseWithDictionary:(NSDictionary *) dictionary;28 + (instancetype) groupPurchase;29 30 @end
 
 1 // 2 //  GroupPurchase.m 3 //  GroupPurchase 4 // 5 //  Created by hellovoidworld on 14/12/3. 6 //  Copyright (c) 2014年 hellovoidworld. All rights reserved. 7 // 8  9 #import "GroupPurchase.h"10 11 @implementation GroupPurchase12 13 //初始化方法14 - (instancetype) initWithDictionary:(NSDictionary *) dictionary15 {16     if (self = [super init]) {17         // 使用KVC18         [self setValuesForKeysWithDictionary:dictionary];19     }20    21     return self;22 }23 24 + (instancetype) groupPurchaseWithDictionary:(NSDictionary *) dictionary {25     return [[self alloc] initWithDictionary:dictionary];26 }27 28 + (instancetype) groupPurchase {29     return [self groupPurchaseWithDictionary:nil];30 }31 32 @end
 
6.plist文件结构
技术分享

ios基础控件 之展示团购数据 UITableViewCell <代理,xib封装view>