UIKit 框架之UITableView一-阿里云开发者社区

开发者社区> 开发与运维> 正文

UIKit 框架之UITableView一

简介:

UITableView在开发中是用的最多的控件,它包含两个代理:UITableViewDataSource,UITableViewDelegate,先熟悉下API

1.初始化


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

 2.UITableViewStyle


typedef NS_ENUM(NSInteger, UITableViewStyle) {
        UITableViewStylePlain,                  // 平铺样式
        UITableViewStyleGrouped                 // 分组样式
    };

 3.style属性


@property (nonatomic, readonly) UITableViewStyle           style;

 4.代理


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

 5.设置Height


//未设置Height时用下面默认
    @property (nonatomic)          CGFloat                     rowHeight;
    @property (nonatomic)          CGFloat                     sectionHeaderHeight;
    @property (nonatomic)          CGFloat                     sectionFooterHeight;
    //默认为0 nil时表示无预估Height
    @property (nonatomic)          CGFloat                     estimatedRowHeight NS_AVAILABLE_IOS(7_0);
    @property (nonatomic)          CGFloat                     estimatedSectionHeaderHeight NS_AVAILABLE_IOS(7_0);
    @property (nonatomic)          CGFloat                     estimatedSectionFooterHeight NS_AVAILABLE_IOS(7_0);

 6.背景视图 自动改变Size适应TableView的尺寸, 做为TableView的子视图放在最底部


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

 7.刷新数据



- (void)reloadData; //刷新数据

- (void)reloadSectionIndexTitles NS_AVAILABLE_IOS(3_0);//分组时刷新组索引

 8.节数行数



- (NSInteger)numberOfSections; //节数量

- (NSInteger)numberOfRowsInSection:(NSInteger)section; //节对应的行数

 9.获取Rect



- (CGRect)rectForSection:(NSInteger)section;                                    // includes header, footer and all rows

- (CGRect)rectForHeaderInSection:(NSInteger)section;

- (CGRect)rectForFooterInSection:(NSInteger)section;

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

 10.Info


//    //获取point点处的NSIndexPath,若点不在任何table中的任意行则返回nil
//    - (NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point;
//    //返回制定UITableViewCell对应的NSIndexPath,不可见返回nil
//    - (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;
//    //返回矩形包含的NSIndexPath
//    - (NSArray *)indexPathsForRowsInRect:(CGRect)rect;
//     //获取indexPath处的UITableViewCell,若cell不可见或indexPath超出边界返回nil
//    - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;
//    //返回可见的UITableViewCell
//    - (NSArray *)visibleCells;
//    //返回可见行的NSIndexPath数组
//    - (NSArray *)indexPathsForVisibleRows;
//    //获取Section对应的headerViewForSection、footerViewForSection
//    - (UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section NS_AVAILABLE_IOS(6_0);
//    - (UITableViewHeaderFooterView *)footerViewForSection:(NSInteger)section NS_AVAILABLE_IOS(6_0);

11.滚动


//滚动到indexPath处
- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;
//滚动到选择的行处
- (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;

12.


//标记了一个tableView的动画块。分别代表动画的开始开始和结束。两者成对出现,可以嵌套使用。一般,在添加,删除,选择 tableView中使用,并实现动效果。在动画块内,不建议使用reloadData方法,如果使用,会影响动画
    - (void)beginUpdates;
    - (void)endUpdates;

13.对节、行的增删改


- (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
   - (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
   - (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
   - (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection NS_AVAILABLE_IOS(5_0);
    
   - (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
   - (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
   - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
   - (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath NS_AVAILABLE_IOS(5_0);

14.修改


//可选中 默认YES
 @property (nonatomic) BOOL allowsSelection NS_AVAILABLE_IOS(3_0);
 //编辑的时候是否可选中  默认NO
 @property (nonatomic) BOOL allowsSelectionDuringEditing;
 //可多选 默认NO
 @property (nonatomic) BOOL allowsMultipleSelection NS_AVAILABLE_IOS(5_0);
 //多选时是否可编辑 默认NO
 @property (nonatomic) BOOL allowsMultipleSelectionDuringEditing NS_AVAILABLE_IOS(5_0);

15.选择


//选中行的NSIndexPath
   - (NSIndexPath *)indexPathForSelectedRow;
   //选中的多行的NSIndexPaths
   - (NSArray *)indexPathsForSelectedRows;
   //选中indexPath对应的行 滚动到行的位置
   - (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;
   //取消选择
   - (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;

 16.


//当我们tableView中section有很多,数据量比较大的时候我们可以引入indexList,来方便完成section的定位,例如系统的通讯录程序。我们可以通过设置tableView的sectionIndexMinimumDisplayRowCount属性来指定当tableView中多少行的时候开始显示IndexList,默认NSIntegerMax,即默认不显示indexList
    @property (nonatomic) NSInteger sectionIndexMinimumDisplayRowCount;

 17.


//节索引的文本颜色
    @property (nonatomic, retain) UIColor *sectionIndexColor
    //节索引的背景色
    @property (nonatomic, retain) UIColor *sectionIndexBackgroundColor
    //点击时节索引背景色
    @property (nonatomic, retain) UIColor *sectionIndexTrackingBackgroundColor
    //单元格分割线的样式
    @property (nonatomic) UITableViewCellSeparatorStyle separatorStyle;
    //设置单元格分割线的颜色
    @property (nonatomic, retain) UIColor              *separatorColor
    //单元格的毛玻璃效果
    @property (nonatomic, copy) UIVisualEffect               *separatorEffect
    //UITableView的HeaderView
    @property (nonatomic, retain) UIView *tableHeaderView;
    //UITableView的FooterView
    @property (nonatomic, retain) UIView *tableFooterView;

 18.


//获取重用队列中的单元格
    - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier;
    //ios6之后出现 需要与registerClass、registerNib配合使用
    - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath
    //获取HeaderFooterView 需要与registerClass、registerNib配合使用
    - (id)dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
    - (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(5_0);
    - (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
     
    - (void)registerNib:(UINib *)nib forHeaderFooterViewReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
    - (void)registerClass:(Class)aClass forHeaderFooterViewReuseIdentifier:(NSString *)identifier

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章