IOS 表格 UITableView 学习笔记

要使用UITableView需要让控制器实现UITableViewDataSource 协议 或者让控制器 继承  UITableViewController  它已经实现UITableViewDataSource 和 UITableViewDelegate 代理协议

使用UITableViewDataSource  “必须实现的方法”      俗称配置数据源

// 每一组显示多少行

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

// 每一行显示什么内容      默认当模拟器启动的时候只显示可视范围的单元内容数据    当有一个新的cell进入视野范围,就会调用

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

 1.首先在加载的时候要让tableView的数据源与控制器关联起来 

- (void)viewDidLoad

{

    [super viewDidLoad];

    self.tableView.dataSource=self;

}

UITableViewDataSource的可选方法

// 如果想改变tableView有几组要实现下面这个方法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;              //  默认只有1

// section组显示什么标题 

-  (NSString *)tableView:(UITableView *)tableViewtitleForHeaderInSection:(NSInteger)section;  

// section组显示什么尾部标题

-  (NSString *)tableView:(UITableView *)tableViewtitleForFooterInSection:(NSInteger)section;

// 局部刷新表格  reloadRowsAtIndexPaths    

NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];

[self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationBottom];

// 重新加载数据      用这个方法可实现加载更多数据     

[self.tableView reloadData];

// 调用上面这个方法的时候 会调用

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

方法进行重新赋值


// 返回右边索引条显示的字符串数据

-  (NSArray*)sectionIndexTitlesForTableView:(UITableView *)tableView;

UITableView的代理协议 UITableViewDelegate  

通常处理tableView的事件都在代理协议中实现要使用UITableViewDelegate 

需要在加载的时候设置

-  (void)viewDidLoad

self.tableView.delegate  =self;

 }

// 设置每一行的高度不同

-  (CGFloat)tableView:(UITableView *)tableViewheightForRowAtIndexPath:(NSIndexPath *)indexPath;

 

// 当某一行被选中的时候

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

   // 获取第几行被选中

   NSInteger *rowx = indexPath.row;

}

   // 当表格开始拖拽的时候触发

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

   // 每一组头部显示的视图

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

UITableView常用属性

// 在表格头部增加一个控件

   self.tableView.tableHeaderView = [UIButton buttonWithType:UIButtonTypeContactAdd];

// 在表格尾部增加一个控件

   self.tableView.tableFooterView = [[UISwitch alloc] init];

//  设置表格统一行高

  self.tableView.rowHeight = 60;

//  设置每组头的行高

  self.tableView.sectionHeaderHeight = 44;       

// 设置表格背景视图

self.tableView.backgroundView = nil;

 // 设置表格背景颜色

  self.tableView.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1];

// 设置表格不允许被选中 

   self.tableView.allowsSelection = NO;  


UITableView优化

 需要优化的方法

 // 每当有一个cell进入视野范围内,就会调用  优化如下

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

{

    static NSString *ID = @"hero";

    // 1.通过一个标识去缓存池中寻找可循环利用的cell

    // dequeue : 出列 (查找)

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

    // 2.如果没有可循环利用的cell

    if (cell == nil){

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];

   //  NSLog(@"------缓存池找不到cell--%d",indexPath.row);

    }

    // 3.cell设置新的数据

    // 取出模型

    Hero *hero = self.heros[indexPath.row];

   

    // 设置cell的数据

    cell.textLabel.text = hero.name;

    cell.detailTextLabel.text = hero.intro;

    cell.imageView.image = [UIImage imageNamed:hero.icon];

   

    return cell;

}

UITableView静态的Cell

默认我们从 设计界面 拖进来的是动态的Cell

静态的Cell 可以直接在cell上面进行拖动控件进行自定义cell 

IOS 表格 UITableView 学习笔记,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。