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