UITableView 和 UITableViewCell 的基本配置和常用属性
一:UITableView的几个重要属性
1,style样式, 在初始化时设置
- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style;
其中UITableViewStyle枚举类型为:
typedef NS_ENUM(NSInteger, UITableViewStyle) {
UITableViewStylePlain, // regular table view
UITableViewStyleGrouped // preferences style table view
};
2,separatorStyle 分割线样式
@property (nonatomic) UITableViewCellSeparatorStyle separatorStyle;
其中UITableViewCellSeparatorStyle枚举类型
typedef NS_ENUM(NSInteger, UITableViewCellSeparatorStyle) {
UITableViewCellSeparatorStyleNone,
UITableViewCellSeparatorStyleSingleLine,
UITableViewCellSeparatorStyleSingleLineEtched // This separator style is only supported for grouped style table views currently
};
3,separatorColor 分割线颜色
@property (nonatomic, retain) UIColor *separatorColor
UI_APPEARANCE_SELECTOR; // default is the standard separator gray
4,rowHeight 行高
@property (nonatomic) CGFloat rowHeight; // will return the default value if unset
5,delegate控制代理
@property (nonatomic, assign) id <UITableViewDataSource> dataSource;
6,dataSource数据代理
@property (nonatomic, assign) id <UITableViewDelegate> delegate;
二,UITableView基本配置
1,UITableViewDataSource协议
@required
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; //没个分区的行数
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;//配置cell
@optional
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; // Default is 1 if not implemented
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView; //section索引的title集合
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section; //设置头部标题
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section; //设置尾部标题
2,UITableViewDelegate协议
1>-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath //设置cell行高
2>-(NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath //设置cell的缩进级别
3>-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)sectionn //设置头部
4>-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section //设置尾部
三,UITableViewCell
1,cell的基本组成; 编辑,内容,辅助
1>编辑 editView,tableView被编辑时显示
2>内容 包括imageView,textLabel,detailTextLabel
3>辅助 accessoryView 显示cell的辅助信息
2,cell定制
1>imageView //图片
2>textLabel //文本
3>detailTextLabel //详情
4>selectStyle //选中效果
有如下四种选中效果
typedef NS_ENUM(NSInteger, UITableViewCellSelectionStyle) {
UITableViewCellSelectionStyleNone,
UITableViewCellSelectionStyleBlue,
UITableViewCellSelectionStyleGray,
UITableViewCellSelectionStyleDefault NS_ENUM_AVAILABLE_IOS(7_0)
};
5>accessoryType //辅助效果
辅助效果为如下枚举类型
typedef NS_ENUM(NSInteger, UITableViewCellAccessoryType) {
UITableViewCellAccessoryNone, // don't show any accessory view
UITableViewCellAccessoryDisclosureIndicator, // regular chevron. doesn't track
UITableViewCellAccessoryDetailDisclosureButton, // info button w/ chevron. tracks
UITableViewCellAccessoryCheckmark, // checkmark. doesn't track
UITableViewCellAccessoryDetailButton NS_ENUM_AVAILABLE_IOS(7_0) // info button. tracks
};
6>accessoryView 自定义设置头边的辅助按钮 //accessoryView的返回值类型为UIView
7>indentationLevel //缩进
3,cell控制
1> -(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath //当accessoryType设置为button类型时,监听事件
2> -(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath //cell 即将被选中是触发
3>-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath //cell已经被选中时触发
4>-(NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath //cell即将被取消时触发
5>-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath //cell被取消时触发
***tableView的一个方法(不是代理方法)[tableView deselectRowAtIndexPath:<#(NSIndexPath *)#> animated:<#(BOOL)#>]//设置选中点击效果
4,cell的自定义
注意,设置行高的方法,是在初始化cell之前执行的。
1> 所以要想根据数据源中数据的大小来显示设置cell的行高,必须要在设置行高的方法中计算数据源中每一项的高度
即在-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 方法内部计算数据源中数据的高度,并返回
2>
-(void)layoutSublayersOfLayer:(CALayer *)layer
{
[super layoutSublayersOfLayer:layer];
//在cell配置方法中进行赋值,而在该方法中进行对cell中属性的其它操作
}
四:cell的重用机制
1,row是tableView中每条数据展示的位置,cell是负责添加到row上展示相应地数据。
2,cell的数量,取决于屏幕所能显示的行数
3,cell重用机制的优点:节省内存空间