必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

tableView处理步骤,2必威)返回指定section内的Ce

2019-09-12 19:42 来源:未知

1、起始化一个UITableView

1 - initWithFrame:frame style:(UITableViewStyle)style

1 struct CGRect {2 CGPoint origin;3 CGSize size;4 };5 typedef struct CGRect CGRect;

1 typedef enum {2 UITableViewStylePlain, //平铺样式3 UITableViewStyleGrouped //分组样式4 } UITableViewStyle;

1、开头化七个UITableView

1、开端化贰个UITableView

版权申明:未经本人同意,禁止转发.

UITableView内置了二种体制:UITableViewStylePlain,UITableViewStyleGrouped

2、配置一个TableView

1)再次来到那么些TableView的体裁

1 @property(nonatomic, readonly) UITableViewStyle style

2)再次回到钦点section内的Cell的行数

1 - (NSInteger)numberOfRowsInSection:(NSInteger)section

当TableView在UITableViewStylePlain下section应该为0

3)返回TableView的section数量

1 - (NSInteger)numberOfSections

4)设置TableView中所有cell的高度

1 @property(nonatomic) CGFloat rowHeight

Apple提出大家选代替理方法tableView:heightForRowAtIndexPath:代替rowHeight方法使TableView的性质更加高

5)设置TableView的分隔线的体裁

1 @property(nonatomic) UITableViewCellSeparatorStyle separatorStyle

1 typedef enum : NSInteger {2 UITableViewCellSeparatorStyleNone, //无分隔线3 UITableViewCellSeparatorStyleSingleLine, //单分割线4 UITableViewCellSeparatorStyleSingleLineEtched //被侵蚀的但分隔线5 } UITableViewCellSeparatorStyle;

6)设置TableView的分隔线颜色

1 @property(nonatomic, retain) UIColor *separatorColor

7)设置TableView的背景视图

1 @property(nonatomic, readwrite, retain) UIView *backgroundView

8)设置TableView的分隔线偏移量

1 @property (nonatomic) UIEdgeInsets separatorInset2 //Available in iOS 7.0 and later.

Apple的例子

1 tableView.separatorInset = UIEdgeInsetsMake(0, 3, 0, 11); //上、左、下、右
1 - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
1 struct CGRect {
2    CGPoint origin;
3    CGSize size;
4 };
5 typedef struct CGRect CGRect;```
1 - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style

1 struct CGRect {
2    CGPoint origin;
3    CGSize size;
4 };
5 typedef struct CGRect CGRect;

1 typedef enum {
2    UITableViewStylePlain, //平铺样式
3    UITableViewStyleGrouped //分组样式
4 } UITableViewStyle;

1. TableView初始化

UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
[self.view addSubview:tableView];
  • 1.UITableView有二种风格:UITableViewStylePlain(普通样式)和UITableViewStyleGrouped(分组样式)
  • 2.UITableView出示数据必要设置数据源dataSource,试行操作需要安装代理delegate

里的艺术:

3、创建TableView的Cell

1)注册三个包含钦赐标示符TableView的Cell的nib对象

1 - registerNib:nib forCellReuseIdentifier:(NSString *)identifier //两个参数不能是nil2 //Available in iOS 5.0 and later.

2)注册一个类用来创设新的Cell

1 - registerClass:cellClass forCellReuseIdentifier:(NSString *)identifier2 //Available in iOS 6.0 and later.

3)使用钦命的标记符再次回到可选拔的Cell

1 - dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath2 //Available in iOS 6.0 and later.

Apple首要提示:使用这一个点子以前必需是使用了registerNib:forCellReuseIdentifier: 恐怕 registerClass:forCellReuseIdentifier:方法注册了Cell

4)使用内定的标示符重回可选取的Cell

1 - dequeueReusableCellWithIdentifier:(NSString *)identifier

1 typedef enum {
2 UITableViewStylePlain, //平铺样式
3 UITableViewStyleGrouped //分组样式
4 } UITableViewStyle;


2. TableView的品质和办法

tableView管理步骤

4、访谈表头和表尾的视图

header通过上面多少个代理方法设置

- tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section- tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

footer通过下边多少个

- tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section- tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section

如果要做整个tableview的header和footer,要通过tableview setHeaderView setFooterView```让表头表尾视图跟着tableView移动需要把tableView的样式设为`group`1)注册一个包含表头或表尾的指定标示符表视图的nib对象

1 - registerNib:nib forHeaderFooterViewReuseIdentifier:(NSString *)identifier2 //Available in iOS 6.0 and later.```

2)注册八个类,用来创建新的包罗表头或表尾的表视图

1 - registerClass:aClass forHeaderFooterViewReuseIdentifier:(NSString *)identifier2 //Available in iOS 6.0 and later.```3)返回一个指定标识符的可重用的附带表头表尾的视图

1 - dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifier2 //Available in iOS 6.0 and later.```

4)设置或回到该表格的表头视图

1 @property(nonatomic, retain) UIView *tableHeaderView

5)设置或再次回到该表格的表尾视图

1 @property(nonatomic, retain) UIView *tableFooterView

6)设置或重返该表格的表头中度

1 @property(nonatomic) CGFloat sectionHeaderHeight```7)设置或返回该表格的表尾高度

1 @property(nonatomic) CGFloat sectionFooterHeight```8)再次回到钦定section的表头视图

1 - (UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section2 //Available in iOS 6.0 and later.```9)返回指定section的表尾视图

1 - (UITableViewHeaderFooterView *)footerViewForSection:(NSInteger)section2 //Available in iOS 6.0 and later.```

2、配置一个TableView

1)返回这个TableView的样式(只读属性)

 

1. 安装中度

  1. 设置cell,分区头(header),分区尾(footer)的高度
    //属性设置 设置表中全数的对象
    tableView.rowHeight = 50;
    tableView.sectionHeaderHeight = 40;
    tableView.sectionFooterHeight = 40;
    //delegate
    //重临内定indexPath的Row的万丈时调用
    • (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
      return 50;
      }
      //再次来到钦定分区(section)的Header的可观时调用
    • (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
      return 40;
      }
      //重回钦命分区(section)的Footer的中度时调用
    • (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
      return 40;
      }
  2. 估算cell,分区头(header),分区尾(footer)的高度 (iOS 7 or later)
    //属性设置 设置表中全体的靶子
    tableView.estimatedRowHeight = 50;
    tableView.estimatedSectionHeaderHeight = 40;
    tableView.estimatedSectionFooterHeight = 40;
    //delegate
    //臆度钦命indexPath的Row的万丈调用
    • (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
      return 50;
      }
      //估量钦定分区(section)的Header的惊人时调用
    • (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section {
      return 40;
      }
      //估量钦点分区(section)的Footer的万丈时调用
    • (CGFloat)tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section {
      return 40;
      }

测度高度(estimatedHeight)是为着加紧tableView的加载速度,设置估量中度后,conteSize.height依照cell的推测值 * cell的个数 总括,contentSize会随着滚动从测度逐步替换来真实中度,结果会导致滚动条的大小处于不安静景况,甚至出现"跳跃".

  1. 常量UITableViewAutomaticDimension (iOS 5 or later)
    //cell(iOS 8 or later)
    tableView.estimatedRowHeight = 44.0
    tableView.rowHeight = UITableViewAutomaticDimension

在UITableViewStyleGrouped情状下,动态计算TableView的headerTitle和FooterTitle的惊人
在iOS 8随后,能够动态计算cell的万丈,须要必需运用autoLayout

#pragma mark 1.有多少组

5、访问Cell和Section

1)再次来到钦命indexPath的Cell

1 - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath```2)返回指定Cell的IndexPath

1 - (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell```3)重返钦定点的IndexPath

1 - (NSIndexPath *)indexPathForRowAtPoint:point```4)返回指定区域内的IndexPath组成的数组

1 - (NSArray *)indexPathsForRowsInRect:rect```5)重回可见的UITableViewCell组成的数组

1 - (NSArray *)visibleCells```6)返回可见表格行的IndexPath组成的数组

1 - (NSArray *)indexPathsForVisibleRows```

1 @property(nonatomic, readonly) UITableViewStyle style```

2、配置三个TableView

2.安装cell的分界线(separator)

  1. 安装分水线缩进
    属性: separatorInset (iOS 7 or later) 在代码意况下正规
    tableView.separatorInset = UIEdgeInsetsMake(0, 30, 0, 50);
  2. 安装分界线类型
    质量: separatorStyle 为枚举类型
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    enum {
    UITableViewCellSeparatorStyleNone,//没分水线
    UITableViewCellSeparatorStyleSingleLine,//单线(默认)
    UITableViewCellSeparatorStyleSingleLineEtched//只援救UITableViewStyleGrouped,但是看起来没什么效果
    }
  3. 设置分界线颜色
    属性: separatorColor
    //默感觉葱青
    tableView.separatorColor = [UIColor cyanColor];
  4. 安装分水岭模糊化(毛玻璃效果)
    属性: separatorEffect (iOS 8 or later)
    分水线会基于背景象模糊化
    UIImageView *bg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"launchImage.png"]];
    tableView.backgroundView = bg;
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    UIVibrancyEffect *vibrancyEffect = [UIVibrancyEffect effectForBlurEffect:blurEffect];
    tableView.separatorEffect = vibrancyEffect;

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

6、推测成分的冲天

1)设置表格行的测度中度以革新质量

1 @property (nonatomic) CGFloat estimatedRowHeight2 //The default value is 0, which means there is no estimate.3 //Available in iOS 7.0 and later.```2)设置Section头的估算高度以改善性能

1 @property(nonatomic) CGFloat estimatedSectionHeaderHeight2 //The default value is 0, which means there is no estimate.3 //Available in iOS 7.0 and later.```3)设置Section尾的古都按高度以改正性能

1 @property(nonatomic) CGFloat estimatedSectionFooterHeight2 //The default value is 0, which means there is no estimate.3 //Available in iOS 7.0 and later.``` ###7、滚动TableView1)滚动到指定的位置

1 - scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:animated```

1 typedef enum {2 UITableViewScrollPositionNone,3 UITableViewScrollPositionTop,4 UITableViewScrollPositionMiddle,5 UITableViewScrollPositionBottom6 } UITableViewScrollPosition;```

2)重回内定section内的Cell的行数

1)重临那一个TableView的体裁(只读属性)

3.设置分区索引栏 (SectionIndex)

  1. 设置索引栏展现所需最小cell的多寡
    属性: sectionIndexMinimumDisplayRowCount
    //cell个数 >= 20 显示索引栏
    tableView.sectionIndexMinimumDisplayRowCount = 20;
  2. 安装索引栏字体颜色
    属性: sectionIndexColor (iOS 6 or later)
    tableView.sectionIndexColor = [UIColor redColor];
  3. 安装索引栏背景观
    属性: sectionIndexBackgroundColor (iOS 7 or later)
    tableView.sectionIndexBackgroundColor = [UIColor cyanColor];
  4. 设置索引栏点击时的背景象
    属性: sectionIndexTrackingBackgroundColor (iOS 6 or later)
    tableView.sectionIndexTrackingBackgroundColor = [UIColor blackColor];
  5. 设置索引栏内容
    数据源: - sectionIndexTitlesForTableView:
    再次来到索引数组,对应相应的分区
    • (nullable NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView {
      return @[@"0",@"1",@"2",@"3",@"10",@"20"];
      }
  6. 设置种种索引对应的分区
    数据源: - tableView:sectionForSectionIndexTitle:atIndex:
    通过title和index明确索引,重返该索引钦命的分区
    • (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
      if ([title isEqualToString:@"10"]){
      return 0;
      }else if(index == 5) {
      return 1;
      }
      return index;
      }
  7. 刷新分区索引栏 (iOS 3.0 or later)
    调用方法: - reloadSectionIndexTitles
    [tableView reloadSectionIndexTitles];

#pragma mark 2.第section组尾部控件有多高

1 - (NSInteger)numberOfRowsInSection:(NSInteger)section
1 @property(nonatomic, readonly) UITableViewStyle style

4.安装背景View,表头,表尾

  1. 设置TableView背景的View
    相似用于安装背景图片等,会自适应大小
    属性: backgroundView (iOS 3.2 or later)
    UIImageView *bg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Image.png"]];
    tableView.backgroundView = bg;
  2. 安装表格的表头
    报表顶部增加协理的View,不会终止
    属性: tableHeaderView
    tableView.tableHeaderView = [self tableHeaderView];
    • (UIView *)tableHeaderView {
      UILabel *headerView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 80)];
      headerView.backgroundColor = [UIColor orangeColor];
      headerView.text = @"表头";
      headerView.textAlignment = NSTextAlignmentCenter;
      return headerView;
      }
  3. 设置表格的表尾
    报表最下边增添协助View,不会停下
    属性: tableFooterView
    tableView.tableFooterView = [self tableFooterView];
    • (UIView *)tableFooterView {
      UILabel *footerView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 80)];
      footerView.backgroundColor = [UIColor orangeColor];
      footerView.text = @"表尾";
      footerView.textAlignment = NSTextAlignmentCenter;
      return footerView;
      }

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

当TableView在UITableViewStylePlain下section应该为0

 

5.安装分区头(header)和分区尾(footer)

  1. 注册HeaderFooterView (iOS 6.0 or later)
    注册Xib
    调用方法: - registerNib:forHeaderFooterViewReuseIdentifier:
    [tableView registerNib:[UINib nibWithNibName:@"TableHeaderFooterView" bundle:nil] forHeaderFooterViewReuseIdentifier:footerView];
    注册Class
    调用方法: - registerClass:forHeaderFooterViewReuseIdentifier:
    [tableView registerClass:[TableHeaderFooterView class] forHeaderFooterViewReuseIdentifier:headerView];
  2. 获得重用的HeaderFooterView (iOS 6.0 or later)
    调用方法: - dequeueReusableHeaderFooterViewWithIdentifier:
    TableHeaderFooterView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:headerView];
  3. 创建HeaderFooterView
    收获钦定分区(section)的HeaderView时调用
    代理: - tableView:viewForHeaderInSection:
    • (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
      TableHeaderFooterView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:headerView];
      view.textLabel.text = [NSString stringWithFormat:@"第%ld分区头",section];
      return view;
      }
      获得钦命分区(section)的FooterView时调用
      代理: - tableView:viewForFooterInSection:
    • (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
      TableHeaderFooterView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:footerView];
      view.name.text = [NSString stringWithFormat:@"第%ld分区尾",section];
      return view;
      }
  4. 安装HeaderFooterTitle (HeaderFooterView优先级大于title)
    设置内定分区(section)的title (HeaderTitle)
    数据源: - tableView:titleForHeaderInSection:
    • (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
      return [NSString stringWithFormat:@"第%ld分区头",section];
      }
      设置钦定分区(section)的title (FooterTitle)
      数据源: - tableView:titleForFooterInSection:
    • (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
      return [NSString stringWithFormat:@"第%ld分区尾",section];
      }
  5. 安装修改钦命分区(section)的HeaderFooterView (iOS 6.0 or later)
    HeaderView就要展现时调用
    代理: - tableView:willDisplayHeaderView:forSection:
    FooterView将要展现时调用
    代理: - tableView:willDisplayFooterView:forSection:
    //headerView就要出现
    • (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
      TableHeaderFooterView *header = (TableHeaderFooterView *)view;
      header.contentView.backgroundColor = [UIColor yellowColor];
      }
      //footerView将在出现
    • (void)tableView:(UITableView *)tableView willDisplayFooterView:(nonnull UIView *)view forSection:(NSInteger)section {
      if (section == 0) {
      TableHeaderFooterView *footer = (TableHeaderFooterView *)view;
      footer.bgView.backgroundColor = [UIColor greenColor];
      }
      }
      HeaderView已经消失时调用
      代理: - tableView:didEndDisplayingHeaderView:forSection:
      FooterView已经消失时调用
      代理: - tableView:didEndDisplayingFooterView:forSection:
      //headerView已经消失
    • (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(nonnull UIView *)view forSection:(NSInteger)section {
      TableHeaderFooterView *header = (TableHeaderFooterView *)view;
      header.textLabel.textAlignment = NSTextAlignmentRight;
      }
      //footerView已经消失
    • (void)tableView:(UITableView *)tableView didEndDisplayingFooterView:(nonnull UIView *)view forSection:(NSInteger)section {
      if (section == 1) {
      TableHeaderFooterView *footer = (TableHeaderFooterView *)view;
      footer.bgView.backgroundColor = [UIColor orangeColor];
      }
      }
  6. 返回HeaderFooterView (iOS 6.0 or later)
    再次回到钦赐分区(section)的HeaderView
    调用方法: - headerViewForSection:
    TableHeaderFooterView *headerView = (TableHeaderFooterView *)[tableView headerViewForSection:indexPath.section];
    headerView.contentView.backgroundColor = [UIColor blackColor];
    回到钦定分区(section)的FooterView
    调用方法: - footerViewForSection:
    TableHeaderFooterView *footerView = (TableHeaderFooterView *)[tableView footerViewForSection:indexPath.section];
    footerView.bgView.backgroundColor = [UIColor grayColor];
  7. 返回HeaderFooterView的大小Rect
    回到钦定分区(section)的深浅(HeaderRect)
    调用方法: - rectForHeaderInSection:
    CGRect headerRect = [tableView rectForHeaderInSection:indexPath.section];
    NSLog(@"分区头大小 = %@",NSStringFromCGRect(headerRect));
    回来钦点分区(section)的轻重(FooterRect)
    调用方法: - rectForFooterInSection:
    CGRect footerRect = [tableView rectForFooterInSection:indexPath.section];
    NSLog(@"分区尾大小 = %@",NSStringFromCGRect(footerRect));

#pragma mark 3.第section组有个别许行

3)返回TableView的section数量

2)重返钦点section内的Cell的行数 

6.设置分区(section)

  1. 设置表格分区数
    数据源: - numberOfSectionsInTableView:
    • (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
      return 4;
      }
  2. 回去表格分区数
    属性:numberOfSections
    NSInteger number = tableView.numberOfSections;
  3. 重返内定分区(section)的大小
    调用方法: - rectForSection:
    CGRect sectionRect = [tableView rectForSection:indexPath.section];
    NSLog(@"分区大小 = %@",NSStringFromCGRect(sectionRect));
  4. 安装动画块
    调用方法: - beginUpdates 和 - endUpdates
    多个章程成对使用,表示三个动画片块.在动画块中得以对表格实行三个再三再四的插入,删除,移动等操作
    [self.tableView beginUpdates];
    [self.tableView insertSections:set withRowAnimation:UITableViewRowAnimationLeft];
    [self.tableView deleteSections:set withRowAnimation:UITableViewRowAnimationTop];
    [self.tableView endUpdates];
  5. 由此点名的卡通片,在钦点地点插入分区(1个或七个)
    调用方法 - insertSections:withRowAnimation: 插入分区时,供给修改分区数目
    • (void)insertSection {
      NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 3)];
      self.sectionNum += 3;
      [self.tableView insertSections:set withRowAnimation:UITableViewRowAnimationLeft];
      }
  6. 透过点名的动画,删除钦命的分区(1个或多个)
    调用方法 - deleteSections:withRowAnimation: 删除分区时,需求修改分区数目
    • (void)deleteSection {
      NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)];
      if (self.sectionNum >= 2) {
      self.sectionNum -= 2;
      [self.tableView deleteSections:set withRowAnimation:UITableViewRowAnimationTop];
      }
      }
  7. 经过点名的动画,刷新钦赐的分区(1个或四个)
    调用方法 - reloadSections:withRowAnimation:
    • (void)reloadSection {
      NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)];
      [self.tableView reloadSections:set withRowAnimation:UITableViewRowAnimationTop];
      }
  8. 将内定分区移动到另一个职分 (iOS 5.0 or later)
    调用方法 - moveSection:toSection:
    • (void)moveSection {
      [self.tableView moveSection:1 toSection:2];
      }

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

1 - (NSInteger)numberOfSections```
4)设置TableView中所有cell的高度
1 - (NSInteger)numberOfRowsInSection:(NSInteger)section

7.设置TableViewCell

  1. 注册cell
    注册Xib (iOS 5.0 or later)
    调用方法 - registerNib:forCellReuseIdentifier:
    [tableView registerNib:[UINib nibWithNibName:@"TableViewCell" bundle:nil] forCellReuseIdentifier:tableViewCell2];
    注册Class (iOS 6.0 or later)
    调用方法 - registerClass:forCellReuseIdentifier:
    [tableView registerClass:[TableViewCell class] forCellReuseIdentifier:tableViewCell1];
  2. 回去重用的cell
    方法1: - dequeueReusableCellWithIdentifier: 适用于cell为空时申请空间
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableViewCell1];
    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableViewCell1];
    }
    措施2: - dequeueReusableCellWithIdentifier:forIndexPath: (iOS 6.0 or later) 适用于注册的cell或storyboard中的cell
    TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
  3. 设置钦命indexPath的cell
    总得完成的方法
    数据源: - tableView:cellForRowAtIndexPath:
    • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
      NSString *identifier = (indexPath.section < 2) ? tableViewCell1:tableViewCell2;
      TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
      //前多个分区为Cell1
      if (indexPath.section < 2) {
      cell.textLabel.text = [NSString stringWithFormat:@"test %ld %ld",indexPath.section,indexPath.row];
      }else {//其他的为Cell2
      cell.name.text = [NSString stringWithFormat:@"%ld",indexPath.section];
      cell.title.text = [NSString stringWithFormat:@"%ld",indexPath.row];
      }
      cell.backgroundColor = [UIColor clearColor];
      return cell;
      }
  4. 修改钦点indexPath的cell
    cell就要呈现时调用(willDisplay)
    代理: - tableView:willDisplayCell:forRowAtIndexPath:
    • (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
      if (indexPath.row == 0) {
      cell.contentView.backgroundColor = [UIColor purpleColor];
      }
      }
      cell已经未有的时候调用 (iOS 6.0 or later)
      代理: - tableView:didEndDisplayingCell:forRowAtIndexPath:
    • (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
      if (indexPath.row == 2) {
      cell.contentView.backgroundColor = [UIColor blueColor];
      }
      }
  5. 归来内定indexPath对应的cell
    调用方法: - cellForRowAtIndex帕特h:
    TableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.contentView.backgroundColor = [UIColor greenColor];
  6. 再次来到钦定indexPath的row的Rect
    调用方法: - rectForRowAtIndexPath:
    CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
    NSLog(@"cell大小 = %@",NSStringFromCGRect(cellRect));
  7. 回到可知区域内cell数组
    属性:visibleCells
    NSArray *cellArr = tableView.visibleCells;
    NSLog(@"可见cell数组:%@",cellar);
  8. 设置钦点分区(section)中row的个数
    总得完毕的点子
    数据源: - tableView:numberOfRowsInSection:
    • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
      return self.rowNum;
      }
  9. 再次来到内定分区(section)中row的个数
    调用方法: - numberOfRowsInSection:
    NSInteger rowNum = [tableView numberOfRowsInSection:indexPath.section];
    NSLog(@"该分区row的个数 = %ld",rowNum);

#pragma mark 4.indexPath这行的cell有多高

1 @property(nonatomic) CGFloat rowHeight```
Apple提出我们采用代理方法tableView:heightForRowAtIndex帕特h:替代rowHeight方法使TableView的天性更加高

 

8.NSIndexPath (UITableView)

  1. indexPath包蕴分区(section)和行(row)
    初始化: + indexPathForRow:inSection:
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:2 inSection:0];
    NSLog(@"section = %ld, row = %ld",indexPath.section,indexPath.row);
  2. 归来钦点点所在row对应的indexPath
    调用方法: - indexPathForRowAtPoint:
    NSIndexPath *indexPath2 = [tableView indexPathForRowAtPoint:cellRect.origin];
    NSLog(@"section = %ld, row = %ld",indexPath2.section,indexPath2.row);
  3. 再次回到钦命cell对应的indexPath
    调用方法: - indexPathForCell:
    NSIndexPath *indexPath3 = [tableView indexPathForCell:cell];
    NSLog(@"section = %ld, row = %ld",indexPath3.section,indexPath3.row);
  4. 回到选中row对应的index帕特h
    属性: - indexPathForSelectedRow
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSLog(@"section = %ld, row = %ld",indexPath.section,indexPath.row);
  5. 回来钦赐区域(Rect)内部存款和储蓄器有rows对应的indexPath数组
    调用方法: - indexPathsForRowsInRect:
    NSArray *indexPathArr1 = [self.tableView indexPathsForRowsInRect:self.view.bounds];
    NSLog(@"%@",indexPathArr1);
  6. 回来表格中全部可知行(rows)对应的indexPath数组
    属性: indexPathsForVisibleRows
    NSArray *indexPathArr2 = [self.tableView indexPathsForVisibleRows];
    NSLog(@"%@",indexPathArr2);
  7. 再次来到表格中负有入选行(rows)对应的index帕特h数组
    属性: indexPathsForSelectedRows (iOS 5.0 or later)
    NSArray *indexPathArr3 = self.tableView.indexPathsForSelectedRows;
    NSLog(@"%@",indexPathArr3);

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

5)设置TableView的分隔线的体制

 当TableView在UITableViewStylePlain下section应该为0

9.选择(Selecte)和滚动(Scroll)

  1. 安装是还是不是允许选用(非编辑状态下) 暗中认可Yes
    属性: allowsSelection (iOS 3.0 or later)
    tableView.allowsSelection = YES;
  2. 设置表格编辑状态下是不是允许选用 暗中认可为NO
    属性: allowsSelectionDuringEditing
    tableView.allowsSelectionDuringEditing = YES;
  3. 安装表格是不是允多数选(非编辑状态下) 默感到NO
    属性: allowsMultipleSelection (iOS 5.0 or later)
    tableView.allowsMultipleSelection = YES;
  4. 设置表格编辑状态下是还是不是允大多选 默感觉NO
    属性: allowsMultipleSelectionDuringEditing (iOS 5.0 or later)
    tableView.allowsMultipleSelectionDuringEditing = YES;
  5. 安装表格选中钦命indexPath的row
    调用方法: - selectRowAtIndexPath:animated:scrollPosition:
    末段二个参数决定选定cell的来得地点
    [tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
  6. 安装表格中钦定indexPath的row的入选用消
    调用方法: - deselectRowAtIndexPath:animated:
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
  7. 客户将要选中某行时接触
    能够钦赐一些indexPath不可能采取,或选用不一致的row都以选取同多个indexPath:
    代理: - tableView:willSelectRowAtIndexPath:
    //内定row == 0无法选用
    • (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
      if (indexPath.row == 0) {
      return nil;
      }
      return indexPath;
      }
  8. 顾客完毕选中某行时接触
    能够做选中之后的操作
    代理: - tableView:didSelectRowAtIndexPath:
    • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
      //裁撤选取情形
      [tableView deselectRowAtIndexPath:indexPath animated:YES];
      }
  9. 客商就要撤废选中央银行时触发
    代理: - tableView:willDeselectRowAtIndexPath: (iOS 3.0 or later)
    //钦定row == 1 无法裁撤选中
    • (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
      if (indexPath.row == 1) {
      return nil;
      }
      return indexPath;
      }
  10. 顾客完毕撤除选中行时触发
    做一些撤回选中后的操作
    代理: - tableView:didDeselectRowAtIndexPath: (iOS 3.0 or later)
    • (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
      TableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
      cell.contentView.backgroundColor = [UIColor orangeColor];
      }

#pragma mark 5.indexPath那行的cell长什么样子

1 @property(nonatomic) UITableViewCellSeparatorStyle separatorStyle```

3)返回TableView的section数量

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

1 typedef enum : NSInteger {
2 UITableViewCellSeparatorStyleNone, //无分隔线
3 UITableViewCellSeparatorStyleSingleLine, //单分水线
4 UITableViewCellSeparatorStyleSingleLineEtched //被侵蚀的但分隔线
5 } UITableViewCellSeparatorStyle;```
6)设置TableView的分隔线颜色

1 - (NSInteger)numberOfSections

#pragma mark 6.第section组底部呈现怎么控件

1 @property(nonatomic, retain) UIColor *separatorColor```
7)设置TableView的背景视图

 

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

1 @property(nonatomic, readwrite, retain) UIView *backgroundView```
8)设置TableView的分隔线偏移量

4)设置TableView中所有cell的高度

- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView

1 @property (nonatomic) UIEdgeInsets separatorInset
2 //Available in iOS 7.0 and later.```
Apple的例子
1 @property(nonatomic) CGFloat rowHeight

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section

1 tableView.separatorInset = UIEdgeInsetsMake(0, 3, 0, 11);
//上、左、下、右

 

//每当有一个cell步入视线显示屏就能够调用,所以在那一个艺术内部就须求优化。

3、创建TableView的Cell

1)注册一个包含指定标示符TableView的Cell的nib对象

Apple建议大家利用代理方法tableView:heightForRowAtIndexPath:代替rowHeight方法使TableView的习性更加高

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{

1 - (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier //多少个参数不能够是nil
2 //Available in iOS 5.0 and later.```
2)注册多少个类用来创立新的Cell

5)设置TableView的分隔线的体制

if(cell==nil){

1 - (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier
2 //Available in iOS 6.0 and later.```
3)使用指定的标示符返回可重用的Cell
1 @property(nonatomic) UITableViewCellSeparatorStyle separatorStyle

1 typedef enum : NSInteger {
2    UITableViewCellSeparatorStyleNone, //无分隔线
3    UITableViewCellSeparatorStyleSingleLine, //单分割线
4    UITableViewCellSeparatorStyleSingleLineEtched //被侵蚀的但分隔线
5 } UITableViewCellSeparatorStyle;

//在那中间做创建的行事。循环优化。防止刷新cell踏入显示器的时候重新的创制

1 - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath
2 //Available in iOS 6.0 and later.```
Apple主要提示:使用这些办法以前必得是选取了registerNib:forCellReuseIdentifier: 或然 registerClass:forCellReuseIdentifier:方法注册了Cell

 

}

4)使用钦命的标示符重临可选拔的Cell

6)设置TableView的分隔线颜色

}

1 - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier
1 @property(nonatomic, retain) UIColor *separatorColor

//当调用reloadData的时候,会再也刷新调用数据源内全部办法,其余作业都不会做啊

4、访谈表头和表尾的视图

 

[selfreloadData]

header通过上面四个代理方法设置

7)设置TableView的背景视图

//那些方法独有在一同来有微微条数据才会算多少个惊人,那几个办法只会调用二遍,不过每便reloadData的时候也会调用

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section```
footer通过下面两个
1 @property(nonatomic, readwrite, retain) UIView *backgroundView

//並且会一遍性算出富有cell的万丈,比方有100条数据,一回性调用98次

  • (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

  • (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section`如果要做整个tableview的header和footer,要通过tableview setHeaderView setFooterView``
    让表头表尾视图跟着tableView移动须求把tableView的体裁设为group

 

- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath

1)注册三个包涵表头或表尾的内定标示符表视图的nib对象

8)设置TableView的分隔线偏移量

-(NSArray*)sectionIndexTitlesForTableView:(UITableView*)tableView//侧边索引

1 - (void)registerNib:(UINib *)nib forHeaderFooterViewReuseIdentifier:(NSString *)identifier
2 //Available in iOS 6.0 and later.```
2)注册一个类,用来创建新的包含表头或表尾的表视图
1 @property (nonatomic) UIEdgeInsets separatorInset
2 //Available in iOS 7.0 and later.

-(void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath//行点击事件

1 - (void)registerClass:(Class)aClass forHeaderFooterViewReuseIdentifier:(NSString *)identifier
2 //Available in iOS 6.0 and later.```
3)重返叁个点名标志符的可采纳的附带表头表尾的视图

 

NSIndexPath*path = [self.tableViewindexPathForSelectedRow];//拿到被选中的indexPath可以得到section,row

1 - (id)dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifier
2 //Available in iOS 6.0 and later.```
4)设置或返回该表格的表头视图

Apple的例子

[self.tableViewreloadRowsAtIndexPaths:[self.tableViewindexPathsForSelectedRows]withRowAnimation:UITableViewRowAnimationNone];//刷新table钦赐行的数据

1 @property(nonatomic, retain) UIView *tableHeaderView```
5)设置或重回该表格的表尾视图

1 tableView.separatorInset = UIEdgeInsetsMake(0, 3, 0, 11);
2 //上、左、下、右

[self.tableViewreloadData];//刷新table全数行的数额

1 @property(nonatomic, retain) UIView *tableFooterView```
6)设置或返回该表格的表头高度

 

UITableView常用属性:

1 @property(nonatomic) CGFloat sectionHeaderHeight```
7)设置或重返该表格的表尾高度


UITableView*tableView = [[UITableViewalloc]initWithFrame:CGRectMake(0,0,320,460)style:UITableViewStylePlain];//伊始化表格

TAG标签:
版权声明:本文由必威发布于必威-编程,转载请注明出处:tableView处理步骤,2必威)返回指定section内的Ce