您的位置:首页 > 产品设计 > UI/UE

UITableView使用

2016-01-07 13:33 543 查看


性能优化

/**
*
每当有一个cell要进入视野范围内,就会调用一次
*/
- (UITableViewCell
*)tableView:(UITableView
*)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath{
static
NSString
*ID = @"wine";

// 1.先去缓存池中查找可循环利用的cell

UITableViewCell
*cell = [tableView dequeueReusableCellWithIdentifier:ID];
// 2.如果缓存池中没有可循环利用的cell

if
(!cell) {
cell = [[UITableViewCell
alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:ID];
// 尽量将cell的初始化设置,放在这个代码块中

// 如果这个设置是所有cell都要保持一致的,就可以放在这个代码块中

cell.textLabel.font
= [UIFont
systemFontOfSize:30];

cell.backgroundColor
= [UIColor
redColor];
}
// 3.设置数据

cell.textLabel.text
= [NSString
stringWithFormat:@"%zd行的数据",
indexPath.row];

if
(indexPath.row
% 2
== 0)
{
cell.accessoryType
= UITableViewCellAccessoryDisclosureIndicator;

}
else
{
cell.accessoryType
= UITableViewCellAccessoryNone;

}
return
cell;
}


索引条

/** * 返回每一组的索引标题(数组中放的是字符串) */
- (NSArray
*)sectionIndexTitlesForTableView:(UITableView
*)tableView{
return
[self.carGroups
valueForKeyPath:@"title"];
}


如何让tableView展示数据

设置数据源对象

self.tableView.dataSource
= self;

数据源对象要遵守协议

@interface
ViewController () <UITableViewDataSource>
@end

实现数据源方法

// 多少组数据
-
(NSInteger)numberOfSectionsInTableView:(UITableView
*)tableView;
//
每一组有多少行数据
-
(NSInteger)tableView:(UITableView
*)tableView numberOfRowsInSection:(NSInteger)section;
//
每一行显示什么内容
-
(UITableViewCell
*)tableView:(UITableView
*)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath;
//
每一组的头部
-
(NSString
*)tableView:(UITableView
*)tableView titleForHeaderInSection:(NSInteger)section;
//
每一组的尾部
-
(NSString
*)tableView:(UITableView
*)tableView titleForFooterInSection:(NSInteger)section


tableView的常见设置

tableview的点击后,点击效果立刻消失
-(void)tableView:(UITableView
*)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath{
[tableView
deselectRowAtIndexPath:indexPath animated:YES];
}

样式设置:

//
设置每一行cell的高度
self.tableView.rowHeight
= 100;
//
设置每一组头部的高度
self.tableView.sectionHeaderHeight
= 50;
//
设置每一组尾部的高度
self.tableView.sectionFooterHeight
= 50;
//
设置分割线颜色
self.tableView.separatorColor
= [UIColor
redColor];
//
设置分割线样式
self.tableView.separatorStyle
= UITableViewCellSeparatorStyleNone;
//
设置表头控件
self.tableView.tableHeaderView
= [[UISwitch
alloc] init];
//
设置表尾控件
self.tableView.tableFooterView
= [UIButton
buttonWithType:UIButtonTypeContactAdd];
//
设置右边索引文字的颜色
self.tableView.sectionIndexColor
= [UIColor
redColor];
//
设置右边索引文字的背景色
self.tableView.sectionIndexBackgroundColor
= [UIColor
blackColor];


tableViewCell的常见设置

// 设置右边的指示样式
cell.accessoryType
= UITableViewCellAccessoryDisclosureIndicator;
//
设置右边的指示控件
cell.accessoryView
= [[UISwitch
alloc] init];
//
设置cell的选中样式
cell.selectionStyle
= UITableViewCellSelectionStyleNone;
//
backgroundView优先级 > backgroundColor
//
设置背景色
cell.backgroundColor
= [UIColor
redColor];
//
设置背景view
UIView
*bg = [[UIView
alloc] init];
bg.backgroundColor
= [UIColor
blueColor];
cell.backgroundView
= bg;
//
设置选中的背景view
UIView
*selectedBg = [[UIView
alloc] init];selectedBg.backgroundColor
= [UIColor
purpleColor];cell.selectedBackgroundView
= selectedBg;


cell的循环利用

传统的写法

/** * 每当有一个cell要进入视野范围内,就会调用一次 */
-
(UITableViewCell
*)tableView:(UITableView
*)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath{
static
NSString
*ID = @"wine";

//
1.先去缓存池中查找可循环利用的cell
UITableViewCell
*cell = [tableView dequeueReusableCellWithIdentifier:ID];
//
2.如果缓存池中没有可循环利用的cell
if
(!cell) {
cell
= [[UITableViewCell
alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:ID];
}

//
3.设置数据
cell.textLabel.text
= [NSString
stringWithFormat:@"%zd行的数据",
indexPath.row];

return
cell;
}

新的写法(注册cell)

NSString
*ID = @"wine";
-
(void)viewDidLoad
{
[super
viewDidLoad];
//
注册某个重用标识 对应的 Cell类型
[self.tableView
registerClass:[UITableViewCell
class] forCellReuseIdentifier:ID];
}
-
(UITableViewCell
*)tableView:(UITableView
*)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath{
//
1.先去缓存池中查找可循环利用的cell
UITableViewCell
*cell = [tableView dequeueReusableCellWithIdentifier:ID];
//
2.设置数据
cell.textLabel.text
= [NSString
stringWithFormat:@"%zd行的数据",
indexPath.row];

return
cell;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: