iOS开发- tableView的协议
在运用 UITableView
时,有必要完成的协议首要包含以下几个
1. UITableViewDataSource
协议
这是最重要的协议,用于供给数据给 UITableView
。没有这个协议,UITableView
是无法显现任何内容的。
有必要完成的办法:
-
tableView:numberOfRowsInSection:
:回来给定 section 中的行数。- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
-
tableView:cellForRowAtIndexPath:
:回来对应indexPath
的单元格(UITableViewCell
)。- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
这两个办法是 UITableViewDataSource
协议中最中心的有必要完成的办法。
可选的办法:
-
tableView:titleForHeaderInSection:
:回来指定 section 的标题(用于表头)。- (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
-
tableView:titleForFooterInSection:
:回来指定 section 的标题(用于表尾)。- (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
-
tableView:canEditRowAtIndexPath:
:指示是否答应修改某一行。- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;
-
tableView:canMoveRowAtIndexPath:
:指示是否答应移动某一行。- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;
2. UITableViewDelegate
协议
UITableViewDelegate
协议用于处理表视图的交互,例如行挑选、行删去、行移动等。这个协议的完成一般是为了增强用户体会。
有必要完成的办法:
实际上,UITableViewDelegate
中并没有严厉“有必要”完成的办法,可是一般会完成以下几种常见办法:
-
tableView:didSelectRowAtIndexPath:
:当用户点击某一行时调用。- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
可选的办法:
-
tableView:heightForRowAtIndexPath:
:设置行高。- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
-
tableView:heightForHeaderInSection:
:设置表头的高度。- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
-
tableView:heightForFooterInSection:
:设置表尾的高度。- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
-
tableView:viewForHeaderInSection:
:自定义表头视图。- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
-
tableView:viewForFooterInSection:
:自定义表尾视图。- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
-
tableView:didDeselectRowAtIndexPath:
:当用户撤销挑选某一行时调用。- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath;
3. UITableViewDragDelegate
和 UITableViewDropDelegate
(iOS 11 及以上)
这些协议首要用于拖放操作(drag and drop
)功用,适用于需求支撑拖动排序或拖拽增加数据的表格。
UITableViewDragDelegate
:用于处理行拖拽操作。UITableViewDropDelegate
:用于处理行的接纳(drop)操作。
这些协议办法在运用拖放功用时十分有用,但它们是可选的,只在支撑拖放操作时才需求完成。
4. UITableViewDataSourcePrefetching
(iOS 10 及以上)
假如表格需求进行数据预加载,UITableViewDataSourcePrefetching
协议十分有用。这个协议答应提早加载行将显现的行的数据(例如,提早加载图片或长途数据)。
-
tableView:prefetchRowsAtIndexPaths:
:预加载数据的办法。- (void)tableView:(UITableView *)tableView prefetchRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
-
tableView:cancelPrefetchingForRowsAtIndexPaths:
:撤销预加载的数据的办法。- (void)tableView:(UITableView *)tableView cancelPrefetchingForRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
总结
-
必需的协议:
UITableViewDataSource
:首要担任供给数据。UITableViewDelegate
:首要担任处理交互(例如行的挑选、修改、行高级)。
-
可选的协议:
UITableViewDragDelegate
和UITableViewDropDelegate
(用于拖放操作)。UITableViewDataSourcePrefetching
(用于数据预加载)。
大部分时分,只需求完成 UITableViewDataSource
和 UITableViewDelegate
中的几个要害办法。假如还需求自定义其他功用(例如拖放、数据预加载),能够依据需求再完成其他协议的办法。
而运用UIcollectionView
也是相同的。