TableViewCell自定义Cell
//
// RootViewController.m
// UI10_自定义Cell
//
// Created by Marry W. on 12/18/15.
// Copyright (c) 2015 蓝鸥. All rights reserved.
//
import "RootViewController.h"
warning 1.导入cell头文件
import "MyTableViewCell.h"
import "MyTableViewCell2.h"
@interface RootViewController () <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, retain) NSArray *arr;
@end
@implementation RootViewController
(void)dealloc
{[_arr release]; [super dealloc];
}
(void)viewDidLoad {
[super viewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = [UIColor whiteColor]; self.title = @"自定义Cell"; // tableView UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; tableView.delegate = self; tableView.dataSource = self; [self.view addSubview:tableView]; [tableView release]; // 获取数据 NSString *path = [[NSBundle mainBundle] pathForResource:@"ContactList" ofType:@"plist"]; self.arr = [NSArray arrayWithContentsOfFile:path];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _arr.count;
} - (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if 0
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (!cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"] autorelease];
}
cell.textLabel.text = _arr[indexPath.row][@"name"];
cell.detailTextLabel.text = _arr[indexPath.row][@"phone"];
endif
if 0
warning 2.使用自定义cell类型获取cell
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (!cell) {
warning 3.创建自定义cell
cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"] autorelease];
}
NSDictionary *dic = _arr[indexPath.row];
cell.nameLabel.text = dic[@"name"];
cell.sexLabel.text = dic[@"sex"];
cell.phoneLabel.text = dic[@"phone"];
cell.hobbyLabel.text = dic[@"hobby"];
endif
if (indexPath.row % 2 != 0) {
MyTableViewCell2 *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (!cell) {
cell = [[MyTableViewCell2 alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
NSDictionary *dic = _arr[indexPath.row];
cell.nameLabel.text = dic[@"name"];
cell.sexLabel.text = dic[@"sex"];
cell.numberLabel.text = dic[@"number"];
cell.phoneLabel.text = dic[@"phone"];
cell.hobbyLabel.text = dic[@"hobby"];
return cell;
} else {
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell1"];
if (!cell) {
warning 3.创建自定义cell
cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell1"] autorelease];
}
NSDictionary *dic = _arr[indexPath.row];
cell.nameLabel.text = dic[@"name"];
cell.sexLabel.text = dic[@"sex"];
cell.phoneLabel.text = dic[@"phone"];
cell.hobbyLabel.text = dic[@"hobby"];
return cell;
}
}
- (CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath
{
return 310;
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
//
// MyTableViewCell.h
// UI10_自定义Cell
//
// Created by Marry W. on 12/18/15.
// Copyright (c) 2015 蓝鸥. All rights reserved.
//
import <UIKit/UIKit.h>
@interface MyTableViewCell : UITableViewCell
// 可以从父类继承来 textLabel等系统控件 命名时 注意不要和原有的重名
@property (nonatomic, retain) UILabel *nameLabel;
@property (nonatomic, retain) UILabel *sexLabel;
@property (nonatomic, retain) UILabel *phoneLabel;
@property (nonatomic, retain) UILabel *hobbyLabel;
@end
//
// MyTableViewCell.m
// UI10_自定义Cell
//
// Created by Marry W. on 12/18/15.
// Copyright (c) 2015 . All rights reserved.
//
import "MyTableViewCell.h"
@implementation MyTableViewCell
(void)dealloc
{[_nameLabel release]; [_sexLabel release]; [_hobbyLabel release]; [_phoneLabel release]; [super dealloc];
}
// 重写cell的初始化
(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {// 创建控件 不设置frame // name self.nameLabel = [[UILabel alloc] init]; _nameLabel.backgroundColor = [UIColor redColor]; // cell中用于存放控件的父视图为contentView [self.contentView addSubview:_nameLabel]; [_nameLabel release]; // sex self.sexLabel = [[UILabel alloc] init]; _sexLabel.backgroundColor = [UIColor orangeColor]; [self.contentView addSubview:_sexLabel]; [_sexLabel release]; // phone self.phoneLabel = [[UILabel alloc] init]; _phoneLabel.backgroundColor = [UIColor yellowColor]; [self.contentView addSubview:_phoneLabel]; [_phoneLabel release]; // hobby self.hobbyLabel = [[UILabel alloc] init]; _hobbyLabel.backgroundColor = [UIColor greenColor]; [self.contentView addSubview:_hobbyLabel]; [_hobbyLabel release];
}
return self;
}
// 布局子视图
// 每一次cell将要显示时都会执行 是显示之前 执行的最后一个方法
(void)layoutSubviews
{// 布局cell上系统创建的控件 [super layoutSubviews]; // 设置自定义cell上的控件布局 _nameLabel.frame = CGRectMake(30, 30, self.contentView.bounds.size.width - 60, 40); CGRect f = _nameLabel.frame; f.origin.y += 70; _sexLabel.frame = f; f.origin.y += 70; _phoneLabel.frame = f; f.origin.y += 70; _hobbyLabel.frame = f;
}
(void)awakeFromNib {
// Initialization code
}
(void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated]; // Configure the view for the selected state
}
@end
//
// MyTableViewCell2.h
// UI10_自定义Cell
//
// Created by Marry W. on 12/18/15.
// Copyright (c) 2015 蓝鸥 rights reserved.
//
import <UIKit/UIKit.h>
@interface MyTableViewCell2 : UITableViewCell
@property (nonatomic, retain) UILabel *nameLabel;
@property (nonatomic, retain) UILabel *sexLabel;
@property (nonatomic, retain) UILabel *phoneLabel;
@property (nonatomic, retain) UILabel *hobbyLabel;
@property (nonatomic, retain) UILabel *numberLabel;
@end
//
// MyTableViewCell2.m
// UI10_自定义Cell
//
// Created by Marry W. on 12/18/15.
// Copyright (c) 2015 蓝鸥. All rights reserved.
//
import "MyTableViewCell2.h"
@implementation MyTableViewCell2
- (void)dealloc
{
[_nameLabel release];
[_sexLabel release];
[_phoneLabel release];
[_numberLabel release];
[_hobbyLabel release];
[super dealloc];
} (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {// 创建控件 不设置frame // name self.nameLabel = [[UILabel alloc] init]; _nameLabel.backgroundColor = [UIColor redColor]; // cell中用于存放控件的父视图为contentView [self.contentView addSubview:_nameLabel]; [_nameLabel release]; // sex self.sexLabel = [[UILabel alloc] init]; _sexLabel.backgroundColor = [UIColor orangeColor]; [self.contentView addSubview:_sexLabel]; [_sexLabel release]; // phone self.phoneLabel = [[UILabel alloc] init]; _phoneLabel.backgroundColor = [UIColor yellowColor]; [self.contentView addSubview:_phoneLabel]; [_phoneLabel release]; // number self.numberLabel = [[UILabel alloc] init]; _numberLabel.backgroundColor = [UIColor greenColor]; [self.contentView addSubview:_numberLabel]; [_numberLabel release]; // hobby self.hobbyLabel = [[UILabel alloc] init]; _hobbyLabel.backgroundColor = [UIColor cyanColor]; [self.contentView addSubview:_hobbyLabel]; [_hobbyLabel release];
}
return self;
}- (void)layoutSubviews
{
// 布局cell上系统创建的控件
[super layoutSubviews];
_nameLabel.frame = CGRectMake(20, 20, 150, 40);
CGRect f1 = _nameLabel.frame;
f1.origin.y += 60;
_phoneLabel.frame = f1;
_sexLabel.frame = CGRectMake(20 + 150 + 30, 20, 150, 40);
CGRect f2 = _sexLabel.frame;
f2.origin.y += 60;
_numberLabel.frame = f2;
_hobbyLabel.frame = CGRectMake(20, 20 + 40 * 2 + 40, 30 + 150 + 150, 40);
} - (void)awakeFromNib {
// Initialization code
} - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];// Configure the view for the selected state
}
@end