iOS中表视图(UITableView)使用详解 (一)

简介: iOS中表视图(UITableView)使用详解

iOS中UITableView使用总结


一、初始化方法


- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style;  


这个方法初始化表视图的frame大小并且设置一个风格,UITableViewStyle是一个枚举,如下:


typedef NS_ENUM(NSInteger, UITableViewStyle) {

   UITableViewStylePlain,                  // 标准的表视图风格

   UITableViewStyleGrouped                 // 分组的表视图风格

};

二、常用属性



获取表视图的风格(只读属性)



@property (nonatomic, readonly) UITableViewStyle           style;



设置表示图代理和数据源代理(代理方法后面讨论)




@property (nonatomic, assign)   id <UITableViewDataSource> dataSource;


@property (nonatomic, assign)   id <UITableViewDelegate>   delegate;




设置表示图的行高(默认为44)



@property (nonatomic)CGFloat rowHeight;



设置分区的头视图高度和尾视图高度(当代理方法没有实现时才有效)



@property (nonatomic)          CGFloat                     sectionHeaderHeight;  


@property (nonatomic)          CGFloat                     sectionFooterHeight;



设置一个行高的估计值(默认为0,表示没有估计,7.0之后可用)



@property (nonatomic)          CGFloat                     estimatedRowHeight;


注意:这个属性官方的解释是如果你的tableView的行高是可变的,那么设计一个估计高度可以加快代码的运行效率。



下面这两个属性和上面相似,分别设置分区头视图和尾视图的估计高度(7.0之后可用)



@property (nonatomic)          CGFloat            estimatedSectionHeaderHeight;  @property (nonatomic)          CGFloat            estimatedSectionFooterHeight;



设置分割线的位置



@property (nonatomic)          UIEdgeInsets                separatorInset;


如果细心,你可能会发现系统默认的tableView的分割线左端并没有顶到边沿。通过这个属性,可以手动设置分割线的位置偏移,比如你向让tableView的分割线只显示右半边,可以如下设置:


UITableView * tab = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];

tab.separatorInset=UIEdgeInsetsMake(0, tab.frame.size.width/2, 0,0);


设置tableView背景view视图



@property(nonatomic, readwrite, retain) UIView *backgroundView;



三、常用方法详解



重载tableView



- (void)reloadData;



重载索引栏



- (void)reloadSectionIndexTitles;


这个方法常用语新加或者删除了索引类别而无需刷新整个表视图的情况下。



获取分区数



- (NSInteger)numberOfSections;



根据分区获取行数



- (NSInteger)numberOfRowsInSection:(NSInteger)section;



获取分区的大小(包括头视图,所有行和尾视图)



- (CGRect)rectForSection:(NSInteger)section;



根据分区分别获取头视图,尾视图和行的高度



- (CGRect)rectForHeaderInSection:(NSInteger)section;


- (CGRect)rectForFooterInSection:(NSInteger)section;


- (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath;



获取某个点在tableView中的位置信息



- (NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point;  



获取某个cell在tableView中的位置信息



- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;



根据一个矩形范围返回一个信息数组,数组中是每一行row的位置信息



- (NSArray *)indexPathsForRowsInRect:(CGRect)rect;



通过位置路径获取cell



- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;



获取所有可见的cell



- (NSArray *)visibleCells;



获取所有可见行的位置信息



- (NSArray *)indexPathsForVisibleRows;



根据分区获取头视图



- (UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section;



根据分区获取尾视图



- (UITableViewHeaderFooterView *)footerViewForSection:(NSInteger)section;



使表示图定位到某一位置(行)



- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;


注意:indexPah参数是定位的位置,决定于分区和行号。animated参数决定是否有动画。scrollPosition参数决定定位的相对位置,它使一个枚举,如下:


typedef NS_ENUM(NSInteger, UITableViewScrollPosition) {

   UITableViewScrollPositionNone,//同UITableViewScrollPositionTop

   UITableViewScrollPositionTop,//定位完成后,将定位的行显示在tableView的顶部    

   UITableViewScrollPositionMiddle,//定位完成后,将定位的行显示在tableView的中间  

   UITableViewScrollPositionBottom//定位完成后,将定位的行显示在tableView最下面

};


使表示图定位到选中行



- (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;


这个函数与上面的非常相似,只是它是将表示图定位到选中的行。

目录
相关文章
|
监控 iOS开发
iOS15适配问题:viewForSupplementaryElementOfKind表头和表尾复用闪退,UITableView section header多22像素等问题
iOS15适配问题:viewForSupplementaryElementOfKind表头和表尾复用闪退,UITableView section header多22像素等问题
488 0
|
缓存 算法 测试技术
iOS UITableView性能优化
iOS UITableView性能优化
iOS UITableView性能优化
|
iOS开发
ios贝塞尔曲线表格视图
x轴和y轴都是可自定义,曲线的值也是对应的值
185 0
ios贝塞尔曲线表格视图
|
iOS开发
IOS的UITableView控件简单使用
IOS的UITableView控件简单使用
342 0
|
iOS开发
iOS开发 - UITableView的tableHeaderView注意事项(遮挡cell,内容重复等等)
iOS开发 - UITableView的tableHeaderView注意事项(遮挡cell,内容重复等等)
625 0
|
iOS开发
iOS开发-关于UITableView去掉粘性的问题
iOS开发-关于UITableView去掉粘性的问题
206 0
|
iOS开发
iOS开发-加在透明视图上的控件会透明
iOS开发-加在透明视图上的控件会透明
283 0
|
iOS开发 开发者
iOS开发-简述UITableView中cell的重用问题
iOS开发-简述UITableView中cell的重用问题
308 0
|
前端开发 小程序 数据处理
iOS上传图片视图的封装:用法 【下篇】
iOS上传图片视图的封装:用法 【下篇】
354 0
iOS上传图片视图的封装:用法 【下篇】
|
前端开发 API 数据处理
iOS小知识:封装上传图片视图(支持删除和添加)
iOS小知识:封装上传图片视图(支持删除和添加)
326 0
iOS小知识:封装上传图片视图(支持删除和添加)