UITableView API详解

作者: Better_奔 | 来源:发表于2017-05-26 10:34 被阅读118次
    #import <Foundation/Foundation.h>
    #import <CoreGraphics/CoreGraphics.h>
    #import <UIKit/UIScrollView.h>
    #import <UIKit/UISwipeGestureRecognizer.h>
    #import <UIKit/UITableViewCell.h>
    #import <UIKit/UIKitDefines.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    //tableView的种类,普通的和组
    typedef NS_ENUM(NSInteger, UITableViewStyle) {
        UITableViewStylePlain,          
        UITableViewStyleGrouped         
    };
    
    //滚动到的位置
    typedef NS_ENUM(NSInteger, UITableViewScrollPosition) {
        UITableViewScrollPositionNone,  //不滚动
        UITableViewScrollPositionTop,    //头
        UITableViewScrollPositionMiddle,   //中间
        UITableViewScrollPositionBottom    //尾
    };                
    
    //刷新时内置的几种动画,用于删除。新增等
    typedef NS_ENUM(NSInteger, UITableViewRowAnimation) {
        UITableViewRowAnimationFade,
        UITableViewRowAnimationRight,           
        UITableViewRowAnimationLeft,
        UITableViewRowAnimationTop,
        UITableViewRowAnimationBottom,
        UITableViewRowAnimationNone,            
        UITableViewRowAnimationMiddle,          
        UITableViewRowAnimationAutomatic = 100  
    };
    
    //表格的牵引数组中的放大镜
    UIKIT_EXTERN NSString *const UITableViewIndexSearch NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED;
    
    //如果约束设置正确,自动计算高度,一般使用方式为tabview.
    UIKIT_EXTERN const CGFloat UITableViewAutomaticDimension NS_AVAILABLE_IOS(5_0);
    
    @class UITableView;
    @class UINib;
    @protocol UITableViewDataSource;
    @protocol UITableViewDataSourcePrefetching;
    @class UILongPressGestureRecognizer;
    @class UITableViewHeaderFooterView;
    @class UIRefreshControl;
    @class UIVisualEffect;
    
    typedef NS_ENUM(NSInteger, UITableViewRowActionStyle) {
        UITableViewRowActionStyleDefault = 0,
        UITableViewRowActionStyleDestructive = UITableViewRowActionStyleDefault,
        UITableViewRowActionStyleNormal
    } NS_ENUM_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED;
    
    //删除按钮等的定制
    NS_CLASS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED @interface UITableViewRowAction : NSObject <NSCopying>
    
    + (instancetype)rowActionWithStyle:(UITableViewRowActionStyle)style title:(nullable NSString *)title handler:(void (^)(UITableViewRowAction *action, NSIndexPath *indexPath))handler;
    
    @property (nonatomic, readonly) UITableViewRowActionStyle style;
    @property (nonatomic, copy, nullable) NSString *title;
    @property (nonatomic, copy, nullable) UIColor *backgroundColor; // default background color is dependent on style
    @property (nonatomic, copy, nullable) UIVisualEffect* backgroundEffect;
    
    @end
    
    //焦点更新的上下文
    NS_CLASS_AVAILABLE_IOS(9_0) @interface UITableViewFocusUpdateContext : UIFocusUpdateContext
    
    @property (nonatomic, strong, readonly, nullable) NSIndexPath *previouslyFocusedIndexPath;
    @property (nonatomic, strong, readonly, nullable) NSIndexPath *nextFocusedIndexPath;
    
    @end
    
    // this represents the display and behaviour of the cells.
    
    @protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>
    
    @optional
    
    
    //将要展示Cell/header/Footer视图回调 可以在其中进行修改
    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;
    - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section NS_AVAILABLE_IOS(6_0);
    - (void)tableView:(UITableView *)tableView willDisplayFooterView:(UIView *)view forSection:(NSInteger)section NS_AVAILABLE_IOS(6_0);
    
    //完成展示Cell/header/Footer视图回调(此时已经展示在了界面上)
    - (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath NS_AVAILABLE_IOS(6_0);
    - (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(UIView *)view forSection:(NSInteger)section NS_AVAILABLE_IOS(6_0);
    - (void)tableView:(UITableView *)tableView didEndDisplayingFooterView:(UIView *)view forSection:(NSInteger)section NS_AVAILABLE_IOS(6_0);
    
    
    // 每个cell高度的返回(这里高度通过协议返回,是为了table能准确的定位出要显示的Cell-index,从而满足UITableView的重用机制)
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
    
    // 每个section-header高度的返回
    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
    
    // 每个section-footer高度的返回
    - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
    
    //性能优化(如果实现),加载的时候使用的是本方法,由于是一个固定的值,不需要计算,所以加载速度回很快,在显示的时候回去调用heightForRowAtIndexPath,真正开始计算。
    - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(7_0);
    - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section NS_AVAILABLE_IOS(7_0);
    - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section NS_AVAILABLE_IOS(7_0);
    
    
    //可返回每个section-header的自定义视图
    - (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; 
    - (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;  
    
    //当cell的accessaryType为UITableViewCellAccessoryDetailDisclosureButton时,
    //点击accessaryView将会调用delegate的tableView:accessoryButtonTappedForRowWithIndexPath方法。否则只是didSelectRowAtIndexPath;
    - (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath NS_DEPRECATED_IOS(2_0, 3_0) __TVOS_PROHIBITED;
    - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;
    
    
    //Cell高亮的回调,一般式在选择的时候才高亮
    - (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);
    - (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);
    - (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);
    
    /* 先点击row1,再点击row2,俩着执行顺序:在下一行将要选中后才取消上一行的选中 
    willSelectRowAtIndexPath 当前row为:0 
    didSelectRowAtIndexPath 当前row为:0 
    willSelectRowAtIndexPath 当前row为:1 
    willDeselectRowAtIndexPath 当前row为:0 
    didDeselectRowAtIndexPath 当前row为:0 
    didSelectRowAtIndexPath 当前row为:1 
    */  
    - (nullable NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath;
    
    - (nullable NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0);
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
    
    - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0);
    
    // Editing
     //返回编辑的类型1.没有2.删除3.插入
    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;
    
    //删除提示文本
    - (nullable NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED;
    
    //ios8 出来的左滑小菜单 可以自定义想要的按钮 (要求ios8以上)
    - (nullable NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED; 
    
    //编辑模式下,不让cell缩进,则使用NO
    //只对grouped的TableView有效。
    - (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath;
    
    //编辑状态发生改变时调用
    - (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath __TVOS_PROHIBITED;
    - (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(nullable NSIndexPath *)indexPath __TVOS_PROHIBITED;
    
    //移动row时执行
    - (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath;               
    
    //方法用于设置缩进的级别
    - (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath; 
    
    //复制的时候三个方法必须被实现
    - (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(5_0);
    - (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(nullable id)sender NS_AVAILABLE_IOS(5_0);
    - (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(nullable id)sender NS_AVAILABLE_IOS(5_0);
    
    //使用Apple TV遥控器控制屏幕上的用户界面时使用
    - (BOOL)tableView:(UITableView *)tableView canFocusRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(9_0);
    - (BOOL)tableView:(UITableView *)tableView shouldUpdateFocusInContext:(UITableViewFocusUpdateContext *)context NS_AVAILABLE_IOS(9_0);
    - (void)tableView:(UITableView *)tableView didUpdateFocusInContext:(UITableViewFocusUpdateContext *)context withAnimationCoordinator:(UIFocusAnimationCoordinator *)coordinator NS_AVAILABLE_IOS(9_0);
    - (nullable NSIndexPath *)indexPathForPreferredFocusedViewInTableView:(UITableView *)tableView NS_AVAILABLE_IOS(9_0);
    
    @end
    
    //根据 indexPath 以动画的形式取消选中。调用此方法不会造成委托接受tableView:willDeselectRowAtIndexPath和tableView:didDeselectRowAtIndexPath:
    //消息;不给UITableViewSelectionDidChangeNotification通知观察者;调用此方法不会产生任何滚动到取消行。
    UIKIT_EXTERN NSNotificationName const UITableViewSelectionDidChangeNotification;
    
    NS_CLASS_AVAILABLE_IOS(2_0) @interface UITableView : UIScrollView <NSCoding>
    
    //初始化方法,需要给定frame和样式
    - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style NS_DESIGNATED_INITIALIZER; 
    
    //在stordBoard 中取出时调用
    - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;
    
    //样式,只读
    @property (nonatomic, readonly) UITableViewStyle style;
    
    //UITableViewDataSource代理,本身不实现
    @property (nonatomic, weak, nullable) id <UITableViewDataSource> dataSource;
    
    //UITableViewDelegate代理,本身实现
    @property (nonatomic, weak, nullable) id <UITableViewDelegate> delegate;
    
    //prefetchDataSource代理,本身不实现,预加载处理。
    @property (nonatomic, weak) id<UITableViewDataSourcePrefetching> prefetchDataSource NS_AVAILABLE_IOS(10_0);
    
    //行高
    @property (nonatomic) CGFloat rowHeight;    
    
    //section头高
    @property (nonatomic) CGFloat sectionHeaderHeight;  
    
    //section尾高
    @property (nonatomic) CGFloat sectionFooterHeight;  
    
     //优化处理,预计高度
    @property (nonatomic) CGFloat estimatedRowHeight NS_AVAILABLE_IOS(7_0); 
    
     //优化处理,预计高度 默认0
    @property (nonatomic) CGFloat estimatedSectionHeaderHeight NS_AVAILABLE_IOS(7_0);
    
     //优化处理,预计高度 默认0
    @property (nonatomic) CGFloat estimatedSectionFooterHeight NS_AVAILABLE_IOS(7_0); 
    
    //cell的分割线的偏移。UIEdgeInsets中的right、left起作用
    @property (nonatomic) UIEdgeInsets separatorInset NS_AVAILABLE_IOS(7_0) 
    
    UI_APPEARANCE_SELECTOR;
    
     //背景色
    @property (nonatomic, strong, nullable) UIView *backgroundView NS_AVAILABLE_IOS(3_2); 
    
    //根据数据重新加载所有cell,包括全部方法重新调用。
    - (void)reloadData; 
    
    // 刷新tableView中的section
    - (void)reloadSectionIndexTitles NS_AVAILABLE_IOS(3_0);  
    
    //Sections个数
    @property (nonatomic, readonly) NSInteger numberOfSections;
    - (NSInteger)numberOfRowsInSection:(NSInteger)section;
    
    //返回指定section的矩形
    - (CGRect)rectForSection:(NSInteger)section;       
    // // 返回section的header矩形               
    - (CGRect)rectForHeaderInSection:(NSInteger)section;
    // 返回section的footer矩形
    - (CGRect)rectForFooterInSection:(NSInteger)section;
    // 返回indexPath指定行的矩形
    - (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath;
    
     //根据一个几何点返回indexPath,如果超过边界返回nil
    - (nullable NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point;     
    
    // 通过cell得到这个cell在tableView的位置                 
    - (nullable NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;  
    
    // 根据一个几何的矩形返回矩形所覆盖的行,返回是一个indexPath数组                    
    - (nullable NSArray<NSIndexPath *> *)indexPathsForRowsInRect:(CGRect)rect;                           
    
    //根据indexPath返回cell
    - (nullable __kindof UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath;   
    
    //返回可见的cells
    @property (nonatomic, readonly) NSArray<__kindof UITableViewCell *> *visibleCells;
    
    //返回可见的位置
    @property (nonatomic, readonly, nullable) NSArray<NSIndexPath *> *indexPathsForVisibleRows;
    
    //我想在numberOfRowsInSection方法内获取该section的header View。
    //须要在使用之前用 tableView 的 registerNib:forHeaderFooterViewReuseIdentifier: 或 registerClass:forHeaderFooterViewReuseIdentifier:。
    - (nullable UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section NS_AVAILABLE_IOS(6_0);
    - (nullable UITableViewHeaderFooterView *)footerViewForSection:(NSInteger)section NS_AVAILABLE_IOS(6_0);
    
    // 滚动到指定位置
    - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;
    - (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;
    
    //和endUpdates一起用,让插入、删除、选择操作同时动画,没用过
    - (void)beginUpdates;  
    - (void)endUpdates;     
    
    //插入sections
    - (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
    
    //删除sections
    - (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
    
    //重新加载sections
    - (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
    
    //调换sections位置
    - (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection NS_AVAILABLE_IOS(5_0);
    
    //根据indexPath数组插入行
    - (void)insertRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
    
    //根据indexPath数组删除行
    - (void)deleteRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
    
    //根据indexPath数组加载行
    - (void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
    
    //根据indexPath调换位置
    - (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath NS_AVAILABLE_IOS(5_0);
    
    
    //YES进入编辑模式,tableview cell会出现插入、删除、重排序的控件
    @property (nonatomic, getter=isEditing) BOOL editing;
    
    //设置进入退出编辑模式 带动画                         
    - (void)setEditing:(BOOL)editing animated:(BOOL)animated;
    
    //是否允许用户选取一行
    @property (nonatomic) BOOL allowsSelection NS_AVAILABLE_IOS(3_0); 
    
    //编辑模式时是否可选取一行
    @property (nonatomic) BOOL allowsSelectionDuringEditing;         
     
    //是否允许用户选取多行                     
    @property (nonatomic) BOOL allowsMultipleSelection NS_AVAILABLE_IOS(5_0);
    
    //编辑模式时是否可选取多行              
    @property (nonatomic) BOOL allowsMultipleSelectionDuringEditing NS_AVAILABLE_IOS(5_0);  
    
    // Selection
    //返回选定行的indexPath,单行
    @property (nonatomic, readonly, nullable) NSIndexPath *indexPathForSelectedRow; 
    
    //返回选定行的indexPath,多行
    @property (nonatomic, readonly, nullable) NSArray<NSIndexPath *> *indexPathsForSelectedRows NS_AVAILABLE_IOS(5_0); 
    
    //滚动到某处选定某行
    - (void)selectRowAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;
    
    //取消选定某行
    - (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;
    
    //指定当tableView中多少行的时候开始显示IndexList,默认的设置是NSIntegerMax,即默认是不显示indexList的
    @property (nonatomic) NSInteger sectionIndexMinimumDisplayRowCount;   
    
    // 设置索引号颜色                                                
    @property (nonatomic, strong, nullable) UIColor *sectionIndexColor NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;   
     
    // 设置索引号背景颜色          
    @property (nonatomic, strong, nullable) UIColor *sectionIndexBackgroundColor NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;     
    
    //设置跟踪索引号背景颜色    
    @property (nonatomic, strong, nullable) UIColor *sectionIndexTrackingBackgroundColor NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR; 
    
    //分隔线的样式(默认为UITableViewCellSeparatorStyleSingleLine)
    @property (nonatomic) UITableViewCellSeparatorStyle separatorStyle __TVOS_PROHIBITED; 
    
    // cell之间的分割线颜色
    @property (nonatomic, strong, nullable) UIColor *separatorColor UI_APPEARANCE_SELECTOR __TVOS_PROHIBITED; 
    
     // 设置毛玻璃效果
    @property (nonatomic, copy, nullable) UIVisualEffect *separatorEffect NS_AVAILABLE_IOS(8_0) UI_APPEARANCE_SELECTOR __TVOS_PROHIBITED;
    
    // 默认是yes,设置为NO则在ios9.0以上不会有偏移
    @property (nonatomic) BOOL cellLayoutMarginsFollowReadableWidth NS_AVAILABLE_IOS(9_0); 
    
    //设置headerView
    @property (nonatomic, strong, nullable) UIView *tableHeaderView;           
    
    //设置headerView                
    @property (nonatomic, strong, nullable) UIView *tableFooterView;                         
    
    //复用cell取出
    - (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier; 
    - (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0); 
    
    //复用的header和footer
    - (nullable __kindof UITableViewHeaderFooterView *)dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);  
    
    //注册cell和header,footer
    - (void)registerNib:(nullable UINib *)nib forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(5_0);
    - (void)registerClass:(nullable Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
    - (void)registerNib:(nullable UINib *)nib forHeaderFooterViewReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
    - (void)registerClass:(nullable Class)aClass forHeaderFooterViewReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
    
    //记住上次的选择
    @property (nonatomic) BOOL remembersLastFocusedIndexPath NS_AVAILABLE_IOS(9_0); 
    
    @end
    
    
    // this protocol represents the data model object. as such, it supplies no information about appearance (including the cells)
    @protocol UITableViewDataSource<NSObject>
    
    @required
    //每个section下cell的个数(必须实现)
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
    
    //通过indexpath返回具体的cell(必须实现)
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
    
    @optional
    //返回有多少个section(默认是1)
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;  
                
     //每个section上面的标语内容
    - (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;   
    
    //每个section下面的标语内容
    - (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
    
    //是否可编辑
    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;
    
    
    // 是否可拖拽
    // -tableView:moveRowAtIndexPath:toIndexPath:
    - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;
    
    // Index
    //设置索引号
    - (nullable NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView __TVOS_PROHIBITED;     
    
    //点击索引触发                                              
    - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index __TVOS_PROHIBITED; 
    
    // Data manipulation - insert and delete support
    //插入/删除指定数据
    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;
    
    // Data manipulation - reorder / moving support
    //重新排序/移动数据操作
    - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;
    
    @end
    
    
    // this protocol can provide information about cells before they are displayed on screen.
    
    @protocol UITableViewDataSourcePrefetching <NSObject>
    
    @required
    //这个新的协议属性是UICollectionView和UITableView都支持的。这个协议其实是用来通知我们,
    //当前滑动到某个区域后,根据这次滑动的方向接下去可能还会滑向哪些indexPaths。好让我们做一些数据上的预备或者销毁。
    - (void)tableView:(UITableView *)tableView prefetchRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
    
    @optional
    // 滑动到某处,相反滑动则调用。
    - (void)tableView:(UITableView *)tableView cancelPrefetchingForRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
    
    @end
    _______________________________________________________________________________________________________________
    
    @interface NSIndexPath (UITableView)
    
    + (instancetype)indexPathForRow:(NSInteger)row inSection:(NSInteger)section;
    
    @property (nonatomic, readonly) NSInteger section;
    @property (nonatomic, readonly) NSInteger row;
    
    @end
    
    NS_ASSUME_NONNULL_END
    

    相关文章

      网友评论

      本文标题:UITableView API详解

      本文链接:https://www.haomeiwen.com/subject/ytitfxtx.html