UI3_CustomUITableViewCell

//  AppDelegate.m
//  UI3_CustomUITableViewCell
//
//  Created by zhangxueming on 15/7/15.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import "AppDelegate.h"
#import "ViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    ViewController *root = [[ViewController alloc] init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:root];
    self.window.rootViewController = nav;
    self.window.backgroundColor = [UIColor whiteColor];
    
    return YES;
}
//  BookTableViewCell.h
//  UI3_CustomUITableViewCell
//
//  Created by zhangxueming on 15/7/15.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "BookModel.h"

@interface BookTableViewCell : UITableViewCell
{
    UILabel *_titleLabel;
    UILabel *_priceLabel;
    UILabel *_detailLabel;
    UIImageView *_imageView;
}

@property (nonatomic, retain) BookModel *model;

@end




//
//  BookTableViewCell.m
//  UI3_CustomUITableViewCell
//
//  Created by zhangxueming on 15/7/15.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import "BookTableViewCell.h"

@implementation BookTableViewCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        _titleLabel  = [[UILabel alloc] initWithFrame:CGRectMake(80, 0, 200, 30)];
        [self.contentView addSubview:_titleLabel];
        
        _priceLabel  = [[UILabel alloc] initWithFrame:CGRectMake(80, 30, 200, 30)];
        [self.contentView addSubview:_priceLabel];
        
        _detailLabel = [[UILabel alloc] initWithFrame:CGRectMake(80, 60, 200, 30)];
        [self.contentView addSubview:_detailLabel];
        _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 15, 60, 60)];
        [self.contentView addSubview:_imageView];
    }
    return self;
}

- (void)setModel:(BookModel *)model
{
    _model = model;
    _titleLabel.text = model.bookTitle;
    _priceLabel.text = model.bookPrice;
    _detailLabel.text = model.bookDetail;
    _imageView.image = [UIImage imageNamed:model.imageName];
}

- (void)awakeFromNib {
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end
//
//  BookModel.h
//  UI3_CustomUITableViewCell
//
//  Created by zhangxueming on 15/7/15.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface BookModel : NSObject

@property (nonatomic, copy)NSString *imageName;
@property (nonatomic, copy)NSString *bookTitle;
@property (nonatomic, copy)NSString *bookPrice;
@property (nonatomic, copy)NSString *bookDetail;

@end

//
//  BookModel.m
//  UI3_CustomUITableViewCell
//
//  Created by zhangxueming on 15/7/15.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import "BookModel.h"

@implementation BookModel

@end
//  AdModel.h
//  UI3_CustomUITableViewCell
//
//  Created by zhangxueming on 15/7/15.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface AdModel : NSObject

@property (nonatomic, copy)NSString *imageName;
@property (nonatomic, copy)NSString *adTitle;


@end


//  AdModel.m
//  UI3_CustomUITableViewCell
//
//  Created by zhangxueming on 15/7/15.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import "AdModel.h"

@implementation AdModel

@end
//  AdTableViewCell.h
//  UI3_CustomUITableViewCell
//
//  Created by zhangxueming on 15/7/15.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface AdTableViewCell : UITableViewCell <UIScrollViewDelegate>
{
    UIScrollView *_scrollView;
    UIView *_bgView;
    UILabel *_titleLabel;
    UIPageControl *_pageControl;
}

@property (nonatomic,strong)NSArray *adArray;

@end



//
//  AdTableViewCell.m
//  UI3_CustomUITableViewCell
//
//  Created by zhangxueming on 15/7/15.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import "AdTableViewCell.h"
#import "AdModel.h"

@implementation AdTableViewCell

//重写构造方法
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        //创建滚动视图
        _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 375, 160)];
        
        [self.contentView addSubview:_scrollView];
        //创建背景视图
        _bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 130, 375, 30)];
        _bgView.backgroundColor = [UIColor grayColor];
        _bgView.alpha = 0.6;
        [self.contentView addSubview:_bgView];
        
        //创建titleLabel
        _titleLabel  = [[UILabel alloc] initWithFrame:CGRectMake(10,0, 200, 30)];
        _titleLabel.textColor = [UIColor whiteColor];
        [_bgView addSubview:_titleLabel];
        
        //创建pageContrl
        _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(210, 0, 100, 30)];
        [_bgView addSubview:_pageControl];
    }
    return self;
}


//分页使能, 该方法一定被执行
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    NSInteger index =  _scrollView.contentOffset.x / 375;
    _pageControl.currentPage = index;
    _titleLabel.text = [[_adArray objectAtIndex:index] adTitle];
}

//
- (void)setAdArray:(NSArray *)adArray
{
    _adArray = adArray;
    for (NSInteger i=0; i<adArray.count; i++) {
        AdModel *model = [adArray objectAtIndex:i];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:model.imageName]];
        imageView.frame = CGRectMake(375*i,0, 375, 160);
        [_scrollView addSubview:imageView];
    }
    _scrollView.pagingEnabled = YES;
    _scrollView.contentSize = CGSizeMake(375*_adArray.count, 160);
    _scrollView.delegate = self;
    
    _pageControl.currentPage = 0;
    _pageControl.numberOfPages = _adArray.count;
    
    _titleLabel.text = [[adArray objectAtIndex:0] adTitle];
}


- (void)awakeFromNib {
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end
//
//  ViewController.h
//  UI3_CustomUITableViewCell
//
//  Created by zhangxueming on 15/7/15.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>


@end



//
//  ViewController.m
//  UI3_CustomUITableViewCell
//
//  Created by zhangxueming on 15/7/15.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import "ViewController.h"
#import "AdModel.h"
#import "AdTableViewCell.h"
#import "BookModel.h"
#import "BookTableViewCell.h"

@interface ViewController ()
{
    //表视图
    UITableView *_tableView;
    //广告数据源
    NSMutableArray *_adArray;
    //book数据源
    NSMutableArray *_dataArray;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self creatAdArray];
    [self createDataArray];
    [self createUI];
}

//创建广告数据源
- (void)creatAdArray
{
    _adArray = [NSMutableArray array];
    for (int i=0; i<4; i++) {
        AdModel *model = [[AdModel alloc] init];
        NSString *imageName = [NSString stringWithFormat:@"image%i", i];
        NSString *title = [NSString stringWithFormat:@"图片%i的标题", i];
        model.imageName = imageName;
        model.adTitle = title;
        [_adArray addObject:model];
    }
}

//创建book数据源

- (void)createDataArray
{
    _dataArray = [NSMutableArray array];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"bookData" ofType:@"plist"];
    NSArray *array = [NSArray arrayWithContentsOfFile:path];
    for (NSDictionary *dict in array) {
        BookModel *model = [[BookModel alloc] init];
        model.bookTitle  = [dict objectForKey:@"title"];
        model.bookPrice  = [dict objectForKey:@"price"];
        model.bookDetail = [dict objectForKey:@"detail"];
        model.imageName = [dict objectForKey:@"icon"];
        [_dataArray addObject:model];
    }
}


- (void)createUI
{
    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 375, 667-64) style:UITableViewStylePlain];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    [self.view addSubview:_tableView];
}

#pragma mark  ---UITableViewDataSource---

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _dataArray.count+1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row==0) {
        static NSString *adCellId = @"adCell";
        AdTableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:adCellId];
        if (!cell) {
            cell = [[AdTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:adCellId];
        }
        //cell.frame = CGRectMake(0, 0, 375, 160);
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        cell.adArray = _adArray;
        return cell;
    }
    else
    {
        static NSString *bookCellId = @"bookCell";
        BookTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:bookCellId];
        if (!cell) {
            cell = [[BookTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:bookCellId];
        }
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        cell.model = [_dataArray objectAtIndex:indexPath.row-1];
        return cell;
    }
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) {
        return 160;
    }
    else
    {
        return 90;
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
原文地址:https://www.cnblogs.com/0515offer/p/4649150.html