标签:des style blog http io ar color os sp
一:模型数据:
#import <Foundation/Foundation.h> @interface LLGroup : NSObject /** * icon */ @property (nonatomic, copy) NSString *icon; /** * title */ @property (nonatomic, copy) NSString *title; /** * buyCount */ @property (nonatomic, copy) NSString *buyCount; /** * price */ @property (nonatomic, copy) NSString *price; + (instancetype)groupWithDic:(NSDictionary *)dic; - (instancetype)initWithDic:(NSDictionary *)dic; + (NSMutableArray *)groupList; @end
#import "LLGroup.h" @implementation LLGroup + (instancetype)groupWithDic:(NSDictionary *)dic { return [[self alloc] initWithDic:dic]; } - (instancetype)initWithDic:(NSDictionary *)dic { if (self = [super init]) { [self setValuesForKeysWithDictionary:dic]; } return self; } + (NSMutableArray *)groupList { NSString *path = [[NSBundle mainBundle] pathForResource:@"tgs.plist" ofType:nil]; NSArray *dicArray = [NSArray arrayWithContentsOfFile:path]; NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithCapacity:dicArray.count]; for (NSDictionary *dic in dicArray) { LLGroup *group = [LLGroup groupWithDic:dic]; [tmpArray addObject:group]; } return tmpArray; } @end
二:自定义cell:利用xib自定义cell (
#import <UIKit/UIKit.h> @class LLGroup; @interface LLGroupCell : UITableViewCell /** * 数据模型 */ @property (nonatomic, strong) LLGroup *group; + (instancetype)groupCellWith:(UITableView *)tableView; @end
#import "LLGroupCell.h" #import "LLGroup.h" @interface LLGroupCell () @property (weak, nonatomic) IBOutlet UIImageView *iconView; @property (weak, nonatomic) IBOutlet UILabel *nameView; @property (weak, nonatomic) IBOutlet UILabel *priceView; @property (weak, nonatomic) IBOutlet UILabel *buyCountView; @end @implementation LLGroupCell - (void)awakeFromNib { // Initialization code } + (instancetype)groupCellWith:(UITableView *)tableView { static NSString *ID = @"groupCell"; LLGroupCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (!cell) { cell = [[[NSBundle mainBundle] loadNibNamed:@"LLGroupCell" owner:nil options:nil] lastObject]; } // 设置cell选中颜色 UIImageView *selectedImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"buttonorange"]]; UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"buttonorange"]]; cell.backgroundView = backgroundImageView; cell.selectedBackgroundView = selectedImageView; return cell; } - (void)setGroup:(LLGroup *)group { _group = group; self.iconView.image = [UIImage imageNamed:group.icon]; self.nameView.text = group.title; self.buyCountView.text = [NSString stringWithFormat:@"已购买%@人", group.buyCount]; self.priceView.text = [NSString stringWithFormat:@"¥%@", group.price]; } @end
设置cell子控件数据:自定义cell应该拥有模型数据,在setter方法中赋值是最合适的
三:自定义footer(利用xib)
#import <UIKit/UIKit.h> @class LLFooterView; @protocol LLFooterViewDelegate <NSObject> @optional - (void)footerViewDidClickLoadBtn:(LLFooterView *)footerView; @end @interface LLFooterView : UIView @property (nonatomic, weak) id<LLFooterViewDelegate> delegate; + (instancetype)footerView; @end
#import "LLFooterView.h" @interface LLFooterView () @property (weak, nonatomic) IBOutlet UIButton *loadBtn; @property (weak, nonatomic) IBOutlet UIView *loadingView; - (IBAction)clickBtn:(UIButton *)sender; @end @implementation LLFooterView + (instancetype)footerView { LLFooterView *footerView = [[[NSBundle mainBundle] loadNibNamed:@"LLFooterView" owner:nil options:nil] lastObject]; return footerView; } // 当xib加载完毕后系统自动调用 - (void)awakeFromNib { self.loadBtn.backgroundColor = [UIColor colorWithRed:241/255.0 green:170/255.0 blue:102/255.0 alpha:1.0]; // 设置按钮圆角 self.loadBtn.layer.cornerRadius = 10.0; self.loadBtn.layer.masksToBounds = YES; } - (IBAction)clickBtn:(UIButton *)sender { self.loadingView.hidden = NO; self.loadingView.backgroundColor = [UIColor colorWithRed:241/255.0 green:170/255.0 blue:102/255.0 alpha:1.0]; self.loadingView.layer.cornerRadius = 10.0; self.loadingView.layer.masksToBounds = YES; sender.hidden = YES; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ if ([self.delegate respondsToSelector:@selector(footerViewDidClickLoadBtn:)]) { [self.delegate footerViewDidClickLoadBtn:self]; } self.loadingView.hidden = YES; self.loadBtn.hidden = NO; }); } @end
这里用到了代理方法:按钮点击后tableView监听按钮的点击事件
四:自定义header
#import <UIKit/UIKit.h> @interface LLHeaderView : UIView + (instancetype)headerView; @end
#import "LLHeaderView.h" #define IMAGEW 260 @interface LLHeaderView ()<UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; @property (weak, nonatomic) IBOutlet UIPageControl *pageControl; @property (nonatomic, strong) NSTimer *timer; @end @implementation LLHeaderView + (instancetype)headerView { LLHeaderView *headerView = [[[NSBundle mainBundle] loadNibNamed:@"LLHeaderView" owner:nil options:nil] lastObject]; headerView.backgroundColor = [UIColor colorWithRed:241/255.0 green:170/255.0 blue:102/255.0 alpha:1.0]; return headerView; } - (void)awakeFromNib { // 1,加载scrollView; [self loadScrollView]; // 2,控制pageControl self.scrollView.delegate = self; // 3,自动滚动 [self startTimer]; } - (void)nextImage { NSInteger page = self.pageControl.currentPage; if (page == self.pageControl.numberOfPages - 1) { page = 0; } else { page++; } self.scrollView.contentOffset = CGPointMake(page * IMAGEW, 0); } #pragma mark - scrollView的代理 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGPoint point = self.scrollView.contentOffset; self.pageControl.currentPage = (point.x + IMAGEW * 0.5) / IMAGEW; } // 开启定时器 - (void)startTimer { NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES]; self.timer = timer; NSRunLoop * loop = [NSRunLoop currentRunLoop]; [loop addTimer:self.timer forMode:NSRunLoopCommonModes]; } - (void)stopTimer { [self.timer invalidate]; self.timer = nil; } - (void)loadScrollView { int count = 5; // CGFloat imageW = 260; CGFloat imageY = 0; CGFloat imageH = 100; for (int i = 0; i<count; i++) { UIImageView *imageView = [[UIImageView alloc] init]; [self.scrollView addSubview:imageView]; CGFloat imageX = i * IMAGEW; NSString *name = [NSString stringWithFormat:@"ad_0%d", i]; imageView.image = [UIImage imageNamed:name]; imageView.frame = CGRectMake(imageX, imageY, IMAGEW, imageH); } self.scrollView.contentSize = CGSizeMake(count * IMAGEW, 0); self.scrollView.showsHorizontalScrollIndicator = NO; self.scrollView.pagingEnabled = YES; self.pageControl.currentPageIndicatorTintColor = [UIColor redColor]; self.pageControl.pageIndicatorTintColor = [UIColor blueColor]; self.pageControl.numberOfPages = count; } - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { [self stopTimer]; } - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { [self startTimer]; } @end
五:控制器
#import "ViewController.h" #import "LLGroup.h" #import "LLGroupCell.h" #import "LLFooterView.h" #import "LLHeaderView.h" @interface ViewController ()<UITableViewDataSource, LLFooterViewDelegate> @property (nonatomic, weak) UITableView *tableView; @property (nonatomic, strong) NSMutableArray *groups; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self loadTableView]; NSLog(@"%@", NSHomeDirectory()); } #pragma mark - 加载tableView - (void)loadTableView { // 1,创建tableView UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain]; [self.view addSubview:tableView]; self.tableView = tableView; // 2, 设置tableView的数据源对象 self.tableView.dataSource = self; // 3,设置tableView的行高 self.tableView.rowHeight = 60; // 4,设置tableView的分割线的颜色 self.tableView.separatorColor = [UIColor colorWithRed:0/255.0 green:255/255.0 blue:0/255.0 alpha:1.0]; // 5,设置tableView的footerView LLFooterView *footerView = [LLFooterView footerView]; self.tableView.tableFooterView = footerView; // 6,设置tableView为footerView的代理 footerView.delegate = self; // 7, 设置tableView的headerView LLHeaderView *headerView = [LLHeaderView headerView]; self.tableView.tableHeaderView = headerView; } #pragma mark - footerView的代理方法 - (void)footerViewDidClickLoadBtn:(LLFooterView *)footerView { LLGroup *group = [[LLGroup alloc] init]; group.title = @"兰州拉面"; group.price = @"20"; group.buyCount = @"200"; group.icon = @"2c97690e72365e38e3e2a95b934b8dd2"; [self.groups addObject:group]; // 刷新数据:因为tableView并不知道数据中多了一行,因此不能用刷新单行的方法,会报错 [self.tableView reloadData]; // 将加载后的行自动上滚 NSIndexPath *path = [NSIndexPath indexPathForRow:self.groups.count - 1 inSection:0]; [self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionBottom animated:YES]; } #pragma mark - 数据源方法 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.groups.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // 1,创建cell LLGroupCell *cell = [LLGroupCell groupCellWith:tableView]; // 2,设置数据 cell.group = self.groups[indexPath.row]; return cell; } #pragma mark - 懒加载数据 - (NSMutableArray *)groups { if (!_groups) { _groups = [LLGroup groupList]; } return _groups; } @end
效果:
UI基础之UITableView案例团购----自定义cell利用xib
标签:des style blog http io ar color os sp
原文地址:http://www.cnblogs.com/-boy/p/4129009.html