1.繼承關係數組
UITableView繼承自UIScrollView,所以支持垂直滾動,並且性能極佳。UITableView的代理協議也繼承了UIScrollView的代理協議,能夠經過實現UIScrollView的代理方法,監聽UITableView的變化。在UITableView中沒有列的概念,只有行的概念,數據都是按行顯示的。ide
2.經常使用屬性性能
// 數據源和代理 @property (nonatomic, weak, nullable) id <UITableViewDataSource> dataSource; @property (nonatomic, weak, nullable) id <UITableViewDelegate> delegate; // tableview的視圖風格(只讀) @property (nonatomic, readonly) UITableViewStyle style; // 設置 行高、區頭高度、區尾高度(當代理方法沒有實現時纔有效) @property (nonatomic) CGFloat rowHeight; @property (nonatomic) CGFloat sectionHeaderHeight; @property (nonatomic) CGFloat sectionFooterHeight; // 若是你的tableView的行高是可變的,那麼設計一個估計高度能夠加快代碼的運行效率。 @property (nonatomic) CGFloat estimatedRowHeight @property (nonatomic) CGFloat estimatedSectionHeaderHeight @property (nonatomic) CGFloat estimatedSectionFooterHeight // 設置分割線的位置(經過這個屬性,能夠手動設置分割線的位置偏移) @property (nonatomic) UIEdgeInsets separatorInset 例如:tableView.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);//分割線邊界對齊 // 設置tableView背景view視圖 @property (nonatomic, strong, nullable) UIView *backgroundView;
3.經常使用方法詳解字體
3.1 數據刷新動畫
// 刷新數據 - (void)reloadData; // 這個方法經常使用於新加或者刪除了索引類別而無需刷新整個表視圖的狀況下。 - (void)reloadSectionIndexTitles;
3.2 信息atom
// 分區數 - (NSInteger)numberOfSections; // 根據分區來獲取所在區的行數 - (NSInteger)numberOfRowsInSection:(NSInteger)section; // 獲取分區的大小(包括頭視圖,全部行和尾視圖) - (CGRect)rectForSection:(NSInteger)section; // 根據分區分別獲取頭視圖,尾視圖和行的高度 - (CGRect)rectForHeaderInSection:(NSInteger)section; - (CGRect)rectForFooterInSection:(NSInteger)section; - (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath; // 獲取某個點在tableView中的位置信息 - (NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point; // 獲取某個cell在tableView中的位置信息 - (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell; // 根據一個矩形範圍返回一個信息數組,數組中是每一行row的位置信息 - (NSArray<NSIndexPath *> *)indexPathsForRowsInRect:(CGRect)rect; // 經過位置路徑獲取cell - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath; // 獲取全部可見的cell - (NSArray *)visibleCells; // 獲取全部可見行的位置信息 - (NSArray *)indexPathsForVisibleRows; // 根據分區獲取頭視圖 - (UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section NS_AVAILABLE_IOS(6_0); // 根據分區獲取尾視圖 - (UITableViewHeaderFooterView *)footerViewForSection:(NSInteger)section NS_AVAILABLE_IOS(6_0); // 使表示圖定位到某一位置(行) - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;
/* 注意:indexPah參數是定位的位置,決定於分區和行號。animated參數決定是否有動畫。scrollPosition參數決定定位的相對位置,它使一個枚舉,以下: typedef NS_ENUM(NSInteger, UITableViewScrollPosition) { UITableViewScrollPositionNone, // 同下 UITableViewScrollPositionTop, // 定位完成後,將定位的行顯示在tableView的頂部 UITableViewScrollPositionMiddle, // 定位完成後,將定位的行顯示在tableView的中間 UITableViewScrollPositionBottom // 定位完成後,將定位的行顯示在tableView的底部 }; */ // 使表示圖定位到選中行 - (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;
3.3 區/行的插入、刪除、刷新spa
// 開始、結束更新 - (void)beginUpdates; // 在這裏寫 插入、刪除、刷新、移動操做。 例如: [tab beginUpdates]; [tab deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:1 inSection:0]] withRowAnimation:UITableViewRowAnimationLeft]; [dataArray removeObjectAtIndex:1]; [tab endUpdates]; - (void)endUpdates; // 插入、刪除、刷新、移動 一個分區 - (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; - (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; - (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; - (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection; // 插入、刪除、刷新、移動 一些行 - (void)insertRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; - (void)deleteRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; - (void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; - (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath;
3.4 編輯操做設計
// 設置是不是編輯狀態(編輯狀態下的cell左邊會出現一個減號,點擊右邊會劃出刪除按鈕) @property (nonatomic, getter=isEditing) BOOL editing;//(默認爲NO) - (void)setEditing:(BOOL)editing animated:(BOOL)animated; // 設置cell是否能夠被選中(默認爲YES) @property (nonatomic) BOOL allowsSelection; // 設置cell編輯模式下是否能夠被選中 @property (nonatomic) BOOL allowsSelectionDuringEditing; // 設置是否支持多選 @property (nonatomic) BOOL allowsMultipleSelection; // 設置編輯模式下是否支持多選 @property (nonatomic) BOOL allowsMultipleSelectionDuringEditing
3.5 選中cell的相關操做代理
// 獲取選中cell的位置信息 - (NSIndexPath *)indexPathForSelectedRow; // 獲取多選cell的位置信息 - (NSArray *)indexPathsForSelectedRows NS_AVAILABLE_IOS(5_0); // 代碼手動選中與取消選中某行 - (void)selectRowAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition; - (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;
3.6 其餘屬性設置rest
// 設置索引欄最小顯示行數 @property (nonatomic) NSInteger sectionIndexMinimumDisplayRowCount; // 設置索引欄字體顏色 @property (nonatomic, strong, nullable) UIColor *sectionIndexColor; // 設置索引欄背景顏色 @property (nonatomic, strong, nullable) UIColor *sectionIndexBackgroundColor; // 設置索引欄被選中時的顏色 @property (nonatomic, strong, nullable) UIColor *sectionIndexTrackingBackgroundColor; // 設置分割線的風格 @property (nonatomic) UITableViewCellSeparatorStyle separatorStyle; /* typedef NS_ENUM(NSInteger, UITableViewCellSeparatorStyle) { UITableViewCellSeparatorStyleNone,//無線 UITableViewCellSeparatorStyleSingleLine,//有線 UITableViewCellSeparatorStyleSingleLineEtched }; */ // 設置分割線顏色 @property (nonatomic, strong, nullable) UIColor *separatorColor; // 設置分割線毛玻璃效果(IOS8以後可用) @property (nonatomic, copy, nullable) UIVisualEffect *separatorEffect; @property (nonatomic) BOOL cellLayoutMarginsFollowReadableWidth NS_AVAILABLE_IOS(9_0); // 設置tableView頭視圖 @property (nonatomic, strong, nullable) UIView *tableHeaderView; // 設置tableView尾部視圖 @property (nonatomic, strong, nullable) UIView *tableFooterView; // 從複用池中取cell - (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier; // 獲取一個已註冊的cell - (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath // 從複用池獲取頭視圖或尾視圖 - (UITableViewHeaderFooterView *)dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifier // 經過xib文件註冊cell - (void)registerNib:(nullable UINib *)nib forCellReuseIdentifier:(NSString *)identifier; // 經過OC類註冊cell - (void)registerClass:(nullable Class)cellClass forCellReuseIdentifier:(NSString *)identifier // 經過xib文件和OC類獲取註冊頭視圖和尾視圖 - (void)registerNib:(nullable UINib *)nib forHeaderFooterViewReuseIdentifier:(NSString *)identifier - (void)registerClass:(nullable Class)aClass forHeaderFooterViewReuseIdentifier:(NSString *)identifier