30. UITableViewDelegate详解

来源:互联网 发布:大时代 知乎 编辑:程序博客网 时间:2024/06/13 06:52

UITableViewDelegate

它用于表现cell的显示和行为,我们查看它的定义:

public protocol UITableViewDelegate : NSObjectProtocol, UIScrollViewDelegate {    // 自定义显示    // cell将要显示时回调    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)     // section的header将要显示时回调    @available(iOS 6.0, *)    optional public func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)    // section的footer将要显示时回调    @available(iOS 6.0, *)     optional public func tableView(tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int)    // cell已显示时回调    @available(iOS 6.0, *)    optional public func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)    // section的header已显示时回调    @available(iOS 6.0, *)    optional public func tableView(tableView: UITableView, didEndDisplayingHeaderView view: UIView, forSection section: Int)    // section的footer已显示时回调    @available(iOS 6.0, *)    optional public func tableView(tableView: UITableView, didEndDisplayingFooterView view: UIView, forSection section: Int)    // 可变高度的支持    // 返回行高    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat    // 返回section的header的高度    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat    // 返回section的footer的高度    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat    // 使用estimatedHeight方法可以快速计算猜测值,可加快table的加载时间    // 如果下面的这些estimatedHeight方法被实现, 上面的tableView:heightForXXX的调用将被推迟到views可以被展示的时候,所以这里可以放一些相对耗资源的逻辑    // 返回预估的行高    @available(iOS 7.0, *)    optional public func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat    // 返回预估 section的header 高度    @available(iOS 7.0, *)    optional public func tableView(tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat    @available(iOS 7.0, *)    // 返回预估 section的footer 高度    optional public func tableView(tableView: UITableView, estimatedHeightForFooterInSection section: Int) -> CGFloat    // Section的header和footer信息    // 返回自定义的 section的header, 它将调整默认或已经指定的header的高度    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?     // 返回自定义的 section的footer, 它将调整默认或已经指定的footer的高度    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView?     // 行右侧的图标被点击的时候的回调     @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath)    // Selection    // -tableView:shouldHighlightRowAtIndexPath: 这个方法将被调用当有行被按下的时候    // 返回false,消息将停止发送而导致当前行在按下的时候不是失去选中时的高亮    // 将要高亮的时候调用    @available(iOS 6.0, *)    optional public func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool    // 已经高亮的时候调用    @available(iOS 6.0, *)    optional public func tableView(tableView: UITableView, didHighlightRowAtIndexPath indexPath: NSIndexPath)    // 已经不高亮的时候调用    @available(iOS 6.0, *)    optional public func tableView(tableView: UITableView, didUnhighlightRowAtIndexPath indexPath: NSIndexPath)    // 在用户改变选中前调用, 返回一个新的indexPath或nil    // 将要选中行    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath?    // 将要取消选中行    @available(iOS 3.0, *)    optional public func tableView(tableView: UITableView, willDeselectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath?    // 改变选中后调用.    // 选中后调用    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)    // 已经取消选中后调用    @available(iOS 3.0, *)    optional public func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath)    // 编辑模式    // 允许给indexPath的cell自定义editingStyle, 如果没有实现下面的方法,那么当editing属性设置为true时,所有的可编辑cell都有UITableViewCellEditingStyleDelete风格    // 指定cell的编辑风格    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle    // 删除时弹出的确认按钮的文字    @available(iOS 3.0, *)    optional public func tableView(tableView: UITableView, titleForDeleteConfirmationButtonForRowAtIndexPath indexPath: NSIndexPath) -> String?    // 如果返回值为非nil,将取代tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:    @available(iOS 8.0, *)    optional public func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]?     // 控制在编辑模式下背景是否缩进. 如果没有实现, 默认是true,它和下面的缩进级别无关, 这个方法只能用于grouped风格的tableView    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, shouldIndentWhileEditingRowAtIndexPath indexPath: NSIndexPath) -> Bool    // 当insert/delete/move按钮将要显示的时候回调    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, willBeginEditingRowAtIndexPath indexPath: NSIndexPath)    // 编辑完成后回调    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, didEndEditingRowAtIndexPath indexPath: NSIndexPath)    // 移动和重新排序    // 允许指定行移动到目标行    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, targetIndexPathForMoveFromRowAtIndexPath sourceIndexPath: NSIndexPath, toProposedIndexPath proposedDestinationIndexPath: NSIndexPath) -> NSIndexPath    // Indentation(压痕)    // 返回压痕个深度等级    @available(iOS 2.0, *)    optional public func tableView(tableView: UITableView, indentationLevelForRowAtIndexPath indexPath: NSIndexPath) -> Int     // 使用复制/粘贴功能, 下面的三个方法必须都实现    // 是否将要显示系统菜单(用于复制/粘贴)    @available(iOS 5.0, *)    optional public func tableView(tableView: UITableView, shouldShowMenuForRowAtIndexPath indexPath: NSIndexPath) -> Bool    // 是否确认显示系统菜单    @available(iOS 5.0, *)    optional public func tableView(tableView: UITableView, canPerformAction action: Selector, forRowAtIndexPath indexPath: NSIndexPath, withSender sender: AnyObject?) -> Bool    // 当用户选择菜单中的某个选项时调用    @available(iOS 5.0, *)    optional public func tableView(tableView: UITableView, performAction action: Selector, forRowAtIndexPath indexPath: NSIndexPath, withSender sender: AnyObject?)    // 获得焦点    // 返回能否获得焦点    @available(iOS 9.0, *)    optional public func tableView(tableView: UITableView, canFocusRowAtIndexPath indexPath: NSIndexPath) -> Bool    // 返回是否将要更新焦点    @available(iOS 9.0, *)    optional public func tableView(tableView: UITableView, shouldUpdateFocusInContext context: UITableViewFocusUpdateContext) -> Bool    // 已经更新焦点时调用    @available(iOS 9.0, *)    optional public func tableView(tableView: UITableView, didUpdateFocusInContext context: UITableViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator)    // 返回上一个焦点的indexPath    @available(iOS 9.0, *)    optional public func indexPathForPreferredFocusedViewInTableView(tableView: UITableView) -> NSIndexPath?}
1 0
原创粉丝点击