文档章节

UITableView基本属性函 用法

我是IT码农
 我是IT码农
发布于 2015/10/15 17:48
字数 2149
阅读 45
收藏 0
UITableView
//滚动到当前行
     
     [ self tableViewScrollCurrentIndexPath];
 
1..h文件里添加协议
@interface HwjViewController : UIViewController < UITableViewDataSource , UITableViewDelegate >
2.声明变量
@interface HwjViewController ()
{
     //声明UITableView视图
     UITableView *_tableView;
     //数据源数组
     NSMutableArray *_dataArray;
}
3.tableView基本设置
- ( void )creatTableView{
     //创建数据源数组   来提供数据
     _dataArray = [[ NSMutableArray alloc]init];
     //给数据源数组添加数据
     for ( int i = 0; i<5; i++) {
         NSString *name = [ NSString stringWithFormat:@ "第%d行" ,i];
         [_dataArray addObject:name];
     }
     //创建tableView视图
     _tableView = [[ UITableView alloc]initWithFrame:CGRectMake(0, 0, 320, 480) style: UITableViewStylePlain ];
     //设置代理
     _tableView.delegate = self ;
     //设置数据源  提供数据的对象
     _tableView.dataSource = self ;
     //对tableView进行设置
     //设置分割线颜色
     _tableView.separatorColor = [ UIColor redColor];
     //设置分割线类型
     //UITableViewCellSeparatorStyleNone没有分割线
     //UITableViewCellSeparatorStyleSingleLine 单线
     //UITableViewCellSeparatorStyleSingleLineEtched 没有线
     _tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine ;
     //设置头视图   只有高度有效
     UIImageView *HeaderView = [[ UIImageView alloc]initWithFrame:CGRectMake(10, 10, 200, 200)];
     //头视图高度有影响
     HeaderView.image = [ UIImage imageNamed:@ "huancun.jpg" ];
      //设置头视图
     _tableView.tableHeaderView = HeaderView;
     //设置尾视图
     UIImageView *FooterView = [[ UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 100)];
     FooterView.image = [ UIImage imageNamed:@ "huancun.jpg" ];
     //设置尾视图
     _tableView.tableFooterView = FooterView;
     [ self .view addSubview:_tableView];
}
4.代理基本设置
#pragma mark - 创建cell
- ( UITableViewCell *)tableView:( UITableView *)tableView cellForRowAtIndexPath:( NSIndexPath *)indexPath{
     //cell复用标志
     static NSString *cellID = @ "cellId" ;
     //从复用队列获取是否有cellID标志对应的可复用的cell
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
     if (cell == nil ) {
         //创建cell
         cell = [[[ UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier:cellID] autorelease];
         //cell上有一个contentView ,cell 上的内容都粘到了contentView上 所有我们要想在cell 上粘贴自己的内容必须要在contentView 上粘贴
         UILabel *label = [[ UILabel alloc] initWithFrame:CGRectMake(290, cell.contentView.bounds.size.height/2, 15, 15)];
         label.tag = 1001; //设置tag 值
         [cell.contentView addSubview:label];
         [label release];
         //把一个label 粘贴到contentView上
         
     }
     NSLog (@ "contentView:%@" ,cell.contentView);
     UILabel *label = ( UILabel *)[cell.contentView viewWithTag:1001];
     label.text = [ NSString stringWithFormat:@ "%d" ,indexPath.row]; //显示哪一行
     
     
     //indexPath:保存的是第几分区的第几行
     //分区:indexPath.section  行:indexPath.row
     //对cell 内容进行修改
     cell.textLabel.text = [ NSString stringWithFormat:@ "第%c分区" ,indexPath.section+ 'A' ];
     
     //获取数据源的数据
     //1.先得到分区数据 一个一维数组
//    NSMutableArray *arr = _dataArray[indexPath.section];
//    cell.detailTextLabel.text = [arr objectAtIndex:indexPath.row];
     cell.detailTextLabel.text = _dataArray[indexPath.section][indexPath.row];
     //设置cell的左侧图片
     cell.imageView.image = [ UIImage imageNamed:@ "11.jpeg" ];
     /*
      //没有选中效果
      UITableViewCellSelectionStyleNone,
      
      
      //下面几个都是灰色风格的
      UITableViewCellSelectionStyleBlue,
      UITableViewCellSelectionStyleGray,
      UITableViewCellSelectionStyleDefault
      */
     //选中之后都是灰的
     //设置cell 的选中风格
     cell.selectionStyle = UITableViewCellSelectionStyleDefault ;
     
     //设置选中背景视图
     UIView *redView = [[ UIView alloc] initWithFrame:CGRectMake(100, 0, 320, 44)];
     //坐标大小没有影响
     redView.backgroundColor = [ UIColor redColor];
     cell.selectedBackgroundView = redView;
     [redView release];
     //设置背景颜色
     cell.backgroundColor = [ UIColor grayColor];
     //设置背景图片
     UIImageView *imageView = [[ UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
     //table_cell_bg比较小  我们可以自己实现拉伸
     imageView.image = [[ UIImage imageNamed:@ "table_cell_bg" ] stretchableImageWithLeftCapWidth:5 topCapHeight:5];
     //stretchableImageWithLeftCapWidth拉伸图片
     //距离左侧5像素 不拉伸 从第6像素开始拉伸
     //距离顶部5像素 不拉伸 从第6像素开始拉伸
     //应用气泡聊天
     
     cell.backgroundView = imageView;
     [imageView release];
     
     return cell;
}
 
//设置分区的个数
- ( NSInteger )numberOfSectionsInTableView:( UITableView *)tableView{
     //返回1代表1个分区
     return 1;
}
//设置行数
- ( NSInteger )tableView:( UITableView *)tableView numberOfRowsInSection:( NSInteger )section{
     //返回1代表1行
     return 1;
}
//设置指定分区的头标标题
- ( NSString *)tableView:( UITableView *)tableView titleForHeaderInSection:( NSInteger )section{
     NSString *nss = @“头标题";
     return nss;
}
//设置指定分区的脚标标题
- ( NSString *)tableView:( UITableView *)tableView titleForFooterInSection:( NSInteger )section{
     NSString *nss = @ "脚标题" ;
     return nss;
}
//设置cell 的行高
- (CGFloat)tableView:( UITableView *)tableView heightForRowAtIndexPath:( NSIndexPath *)indexPath{
     //默认行高44
     return 50;
}
//选中指定行 调用
//已经选中
- ( void )tableView:( UITableView *)tableView didSelectRowAtIndexPath:( NSIndexPath *)indexPath{
    NSLog (@ "第%d行选中" ,indexPath.row);
}
//取消选中的时候调用
//从选中状态到非选中状态
//反选
- ( void )tableView:( UITableView *)tableView didDeselectRowAtIndexPath:( NSIndexPath *)indexPath{
     NSLog (@ "第%d行取消选中/反选" ,indexPath.row);
}
     1   - ( void )viewDidLoad  
     2   {  
     3       [ super  viewDidLoad];  
     4        //初始化数据  
     5        NSArray  *array1_=@[@ "张铁林" ,@ "张国立" ,@ "张国荣" ,@ "张艺谋" ,@ "张惠妹" ];  
     6        NSArray  *array2_=@[@ "李小龙" ,@ "李小路" ];  
     7        NSArray  *array3_=@[@ "王刚" ];  
     8        self .myDic=@{@ "老张家" :array1_, @ "老李家" :array2_, @ "老王家" :array3_};  
     9     
     10        
     11       UITableView  *myTableView_=[[ UITableView  alloc] initWithFrame:CGRectMake(0, 0, 320, 460) style: UITableViewStylePlain ];  
     12      myTableView_.delegate= self ;  
     13      myTableView_.dataSource= self ;  
     14       //改变换行线颜色lyttzx.com  
     15      myTableView_.separatorColor = [ UIColor  blueColor];  
     16       //设定Header的高度,  
     17      myTableView_.sectionHeaderHeight=50;  
     18       //设定footer的高度,  
     19      myTableView_.sectionFooterHeight=100;  
     20       //设定行高  
     21      myTableView_.rowHeight=100;  
     22       //设定cell分行线的样式,默认为UITableViewCellSeparatorStyleSingleLine  
     23      [myTableView_ setSeparatorStyle: UITableViewCellSeparatorStyleSingleLine ];  
     24       //设定cell分行线颜色  
     25      [myTableView_ setSeparatorColor:[ UIColor  redColor]];  
     26       //编辑tableView  
     27      myTableView_.editing= NO ;  
     28    
     29      [ self .view addSubview:myTableView_];  
     30        
     31       //跳到指的row or section  
     32      [myTableView_ scrollToRowAtIndexPath:[ NSIndexPath  indexPathForRow:2 inSection:2]  
     33                       atScrollPosition: UITableViewScrollPositionBottom  animated: NO ];  
     34    
     35  }  
     36    
     37    
     38    
     39  //指定有多少个分区(Section),默认为1  
     40  - ( NSInteger )numberOfSectionsInTableView:( UITableView  *)tableView {  
     41       return  [[ self .myDic allKeys] count];  
     42  }  
     43    
     44    
     45  //每个section底部标题高度(实现这个代理方法后前面 sectionHeaderHeight 设定的高度无效)  
     46  -(CGFloat)tableView:( UITableView  *)tableView heightForHeaderInSection:( NSInteger )section{  
     47       return  20;  
     48  }  
     49    
     50  //每个section头部标题高度(实现这个代理方法后前面 sectionFooterHeight 设定的高度无效)  
     51  -(CGFloat)tableView:( UITableView  *)tableView heightForFooterInSection:( NSInteger )section{  
     52       return  20;  
     53  }  
     54    
     55  //每个section头部的标题-Header  
     56  - ( NSString  *)tableView:( UITableView  *)tableView titleForHeaderInSection:( NSInteger )section{  
     57       return  [[ self .myDic allKeys] objectAtIndex:section];  
     58  }  
     59    
     60  //每个section底部的标题-Footer  
     61  - ( NSString  *)tableView:( UITableView  *)tableView titleForFooterInSection:( NSInteger )section{  
     62       return  nil ;  
     63  }  
     64    
     65  //用以定制自定义的section头部视图-Header  
     66  -( UIView  *)tableView:( UITableView  *)tableView viewForHeaderInSection:( NSInteger )section{  
     67       return  nil ;  
     68  }  
     69    
     70  //用以定制自定义的section底部视图-Footer  
     71  -( UIView  *)tableView:( UITableView  *)tableView viewForFooterInSection:( NSInteger )section{  
     72       UIImageView  *imageView_=[[ UIImageView  alloc]initWithFrame:CGRectMake(0, 0, 320, 20)];  
     73      imageView_.image=[ UIImage  imageNamed:@ "1000.png" ];  
     74       return  [imageView_ autorelease];  
     75  }  
     76    
     77    
     78  //指定每个分区中有多少行,默认为1  
     79  - ( NSInteger )tableView:( UITableView  *)tableView numberOfRowsInSection:( NSInteger )section{  
     80       return  [[ self .myDic objectForKey:[[ self .myDic allKeys]objectAtIndex:section]] count];  
     81  }  
     82    
     83  //改变行的高度(实现主个代理方法后 rowHeight 设定的高度无效)  
     84  - (CGFloat)tableView:( UITableView  *)tableView heightForRowAtIndexPath:( NSIndexPath  *)indexPath{  
     85       return  100;  
     86  }  
     87    
     88    
     89  //绘制Cell  
     90  -( UITableViewCell  *)tableView:( UITableView  *)tableView cellForRowAtIndexPath:( NSIndexPath  *)indexPath {  
     91       static  NSString  *SimpleTableIdentifier = @ "SimpleTableIdentifier" ;  
     92        
     93       UITableViewCell  *cell = [tableView dequeueReusableCellWithIdentifier:  
     94                               SimpleTableIdentifier];  
     95        
     96       if  (cell ==  nil ) {  
     97          cell = [[[ UITableViewCell  alloc] initWithStyle: UITableViewCellStyleDefault  
     98                                         reuseIdentifier: SimpleTableIdentifier] autorelease];  
     99        //设定附加视图  
     100         [cell setAccessoryType: UITableViewCellAccessoryDetailDisclosureButton ];  
     101 //        UITableViewCellAccessoryNone,                   // 没有标示  
     102 //        UITableViewCellAccessoryDisclosureIndicator,    // 下一层标示  
     103 //        UITableViewCellAccessoryDetailDisclosureButton, // 详情button  
     104 //        UITableViewCellAccessoryCheckmark               // 勾选标记  
     105           
     106       //设定选中cell时的cell的背影颜色  
     107         cell.selectionStyle= UITableViewCellSelectionStyleBlue ;      //选中时蓝色效果  
     108 //        cell.selectionStyle=UITableViewCellSelectionStyleNone; //选中时没有颜色效果  
     109 //        cell.selectionStyle=UITableViewCellSelectionStyleGray;  //选中时灰色效果  
     110 //          
     111 //        //自定义选中cell时的背景颜色  
     112 //        UIView *selectedView = [[UIView alloc] initWithFrame:cell.contentView.frame];  
     113 //        selectedView.backgroundColor = [UIColor orangeColor];  
     114 //        cell.selectedBackgroundView = selectedView;  
     115 //        [selectedView release];  
     116   
     117           
     118 //        cell.selectionStyle=UITableViewCellAccessoryNone; //行不能被选中  
     119   
     120     }  
     121       
     122      //这是设置没选中之前的背景颜色  
     123     cell.contentView.backgroundColor = [ UIColor  clearColor];  
     124     cell.imageView.image=[ UIImage  imageNamed:@ "1001.jpg" ]; //未选cell时的图片  
     125     cell.imageView.highlightedImage=[ UIImage  imageNamed:@ "1002.jpg" ]; //选中cell后的图片  
     126     cell.textLabel.text=[[ self .myDic objectForKey:[[ self .myDic allKeys]objectAtIndex:indexPath.section]]objectAtIndex:indexPath.row];  
     127      return  cell;  
     128 }  
     129   
     130   
     131 //行缩进  
     132 -( NSInteger )tableView:( UITableView  *)tableView indentationLevelForRowAtIndexPath:( NSIndexPath  *)indexPath{  
     133      NSUInteger  row = [indexPath row];  
     134      return  row;  
     135 }  
     136   
     137 //选中Cell响应事件  
     138 - ( void )tableView:( UITableView  *)tableView didSelectRowAtIndexPath:( NSIndexPath  *)indexPath{  
     139     [tableView deselectRowAtIndexPath:indexPath animated: YES ]; //选中后的反显颜色即刻消失  
     140       
     141      //得到当前选中的cell  
     142      UITableViewCell  *cell=[tableView cellForRowAtIndexPath:indexPath];  
     143      NSLog (@ "cell=%@" ,cell);  
     144 }  
     145   
     146 //行将显示的时候调用,预加载行  
     147 -( void )tableView:( UITableView  *)tableView willDisplayCell:( UITableViewCell  *)cell forRowAtIndexPath:( NSIndexPath  *)indexPath  
     148 {  
     149      NSLog (@ "将要显示的行是\n cell=%@  \n indexpath=%@" ,cell,indexPath);  
     150 }  
     151   
     152 //选中之前执行,判断选中的行(阻止选中第一行)  
     153 -( NSIndexPath  *)tableView:( UITableView  *)tableView willSelectRowAtIndexPath:( NSIndexPath  *)indexPath  
     154 {  
     155      NSUInteger  row = [indexPath row];  
     156      if  (row == 0)  
     157          return  nil ;  
     158      return  indexPath;  
     159 }  
     160   
     161   
     162   
     163 //编辑状态,点击删除时调用  
     164 - ( void )tableView:( UITableView  *)tableView commitEditingStyle:( UITableViewCellEditingStyle )editingStyle  
     165 forRowAtIndexPath:( NSIndexPath  *)indexPath  
     166 {  
     167       
     168 }  
     169   
     170 //cell右边按钮格式为UITableViewCellAccessoryDetailDisclosureButton时,点击按扭时调用的方法  
     171 -( void )tableView:( UITableView  *)tableView accessoryButtonTappedForRowWithIndexPath:( NSIndexPath  *)indexPath{  
     172      NSLog (@ "当前点击的详情button \n indexpath=%@" ,indexPath);  
     173 }  
     174   
     175 //右侧添加一个索引表  
     176 - ( NSArray  *)sectionIndexTitlesForTableView:( UITableView  *)tableView{  
     177      return  [ self .myDic allKeys];  
     178 }  
     179   
     180 //划动cell是否出现del按钮  
     181 - ( BOOL )tableView:( UITableView  *)tableView canEditRowAtIndexPath:( NSIndexPath  *)indexPath {  
     182      return  YES ;  
     183 }  
     184   
     185 //设定横向滑动时是否出现删除按扭,(阻止第一行出现)  
     186 -( UITableViewCellEditingStyle )tableView:( UITableView  *)tableView editingStyleForRowAtIndexPath:( NSIndexPath  *)indexPath  
     187 {  
     188      if  (indexPath.row==0) {  
     189          return  UITableViewCellEditingStyleNone ;  
     190     }  
     191      else {  
     192          return  UITableViewCellEditingStyleDelete ;  
     193     }  
     194      return  UITableViewCellEditingStyleDelete ;  
     195 }  
     196   
     197 //自定义划动时delete按钮内容  
     198 - ( NSString  *)tableView:( UITableView  *)tableView  
     199 titleForDeleteConfirmationButtonForRowAtIndexPath:( NSIndexPath  *)indexPath{  
     200      return  @ "删除这行" ;  
     201 、、删除cell 时的动画效果
     202  [ self .tableView deleteRowsAtIndexPaths:[ NSArray arrayWithObject:indexPath] withRowAnimation: UITableViewRowAnimationFade ];
     203           
     204 }  
     205   
     206 //开始移动row时执行  
     207 -( void )tableView:( UITableView  *)tableView moveRowAtIndexPath:( NSIndexPath  *)sourceIndexPath toIndexPath:( NSIndexPath *)destinationIndexPath  
     208 {  
     209      NSLog (@ "sourceIndexPath=%@" ,sourceIndexPath);  
     210      NSLog (@ "sourceIndexPath=%@" ,destinationIndexPath);  
     211 }  
     212   
     213 //滑动可以编辑时执行  
     214 -( void )tableView:( UITableView  *)tableView willBeginEditingRowAtIndexPath:( NSIndexPath  *)indexPath  
     215 {  
     216      NSLog (@ "willBeginEditingRowAtIndexPath" );  
     217 }  
     218   
     219 //将取消选中时执行, 也就是上次先中的行  
     220 -( NSIndexPath  *)tableView:( UITableView  *)tableView willDeselectRowAtIndexPath:( NSIndexPath  *)indexPath  
     221 {  
     222      NSLog (@ "上次选中的行是  \n indexpath=%@" ,indexPath);  
     223      return  indexPath;  
     224 }  
     225   
     226   
     227 //让行可以移动  
     228 -( BOOL )tableView:( UITableView  *)tableView canMoveRowAtIndexPath:( NSIndexPath  *)indexPath  
     229 {  
     230      return  NO ;  
     231 }  
     232   
     233 //移动row时执行  
     234 -( NSIndexPath  *)tableView:( UITableView  *)tableView targetIndexPathForMoveFromRowAtIndexPath:( NSIndexPath  *)sourceIndexPath toProposedIndexPath:( NSIndexPath  *)proposedDestinationIndexPath  
     235 {  
     236      NSLog (@ "targetIndexPathForMoveFromRowAtIndexPath" );  
     237      //用于限制只在当前section下面才可以移动  
     238      if (sourceIndexPath.section != proposedDestinationIndexPath.section){  
     239          return  sourceIndexPath;  
     240     }  
     241      return  proposedDestinationIndexPath;  
     242 }  
     243 //设置索引栏字体颜色
  _tableView.sectionIndexColor = [ UIColor redColor];

本文转载自:http://www.oschina.net/code/snippet_2248391_51425

共有 人打赏支持
我是IT码农
粉丝 6
博文 66
码字总数 29699
作品 0
成都
程序员
私信 提问
UITableView 基本使用方法总结

首先,Controller需要实现两个 delegate ,分别是 UITableViewDelegate 和 UITableViewDataSource 2.然后 UITableView对象的 delegate要设置为 self。 3. 然后就可以实现这些delegate的一些方...

悠哉悠哉e
2012/11/13
0
0
关于UITableViewCell和UITableView之间的消息传递

问题:当UITableViewCell中发生点击事件(或者其他事件)时,它是如何通知UITableView然后调用UITableView的delegate呢? 详细描述:UITableViewCell中没有属性可以设置它所在的UITableView...

罗包子
2015/04/13
311
0
UI_09 UITableView(表视图)

⼀、表视图 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView。UITableView继承自UIScrollView,因此支持垂直滚动,而且性能极佳 1、表示图的样式 UITableViewStylePlain UITa...

黑伞将军
2015/08/26
0
0
iOS开发tips-神奇的UITableView

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianxin160/article/details/71436920 概述 UITableView是iOS开发中使用频率最高的UI控件,在前面的文章中对于...

KenshinCui
2017/05/08
0
0
UITableView 保存选中状态的方式

昨天看到UITableView中的属性 @property(nonatomic) BOOL allowsSelection;//是否允许选中cell,默认为YES@property(nonatomic) BOOL allowsMultipleSelection;//是否允许多个选中cell@proper......

Aimy
2013/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库技术-Mysql主从复制与数据备份

数据库技术-Mysql 主从复制的原理: MySQL中数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”...

须臾之余
昨天
12
0
Git远程仓库——GitHub的使用(一)

Git远程仓库——GitHub的使用(一) 一 、 Git远程仓库 由于你的本地仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要一下设置: 步骤一、 创建SSH key 在用户主目录下,看看有没有.ss...

lwenhao
昨天
2
0
SpringBoot 整合

springBoot 整合模板引擎 SpringBoot 整合Mybatis SpringBoot 整合redis SpringBoot 整合定时任务 SpringBoot 整合拦截器...

细节探索者
昨天
1
0
第二个JAVA应用

第二个JAVA应用 方法一:配置文件: # cd /usr/local/tomcat/conf/# vim server.xml</Host> <Host name="www.wangzb.cc" appBase="/data/wwwroot/www.wangzb.cc" //引用所......

wzb88
昨天
0
0
2019年阿里Java面试必问:JVM与性能优化+Redis+设计模式+分布式

前言 一年之计在于春 金三银四已经要到来,2019的新的开始,作为一个开发人员,你是否面上了自己理想的公司,薪资达到心中理想的高度? 面试:如果不准备充分的面试,完全是浪费时间,更是对...

火力全開
昨天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部