1、UITableView
API文档总结:




 
 
 1.UITableView的父类时,UIScrollView,所以它是可以滚动的,但是只能在竖直方向滚动.

2.UITableView是iOS中提供的用来以列表的形式展示数据,但是只有一列.

    
3.UITableView可以由多个分组构成(section),每个分组下可以有很多行(row),分组和行的下标都是从零开始.(eg:sention
班级分组 row 同学所在排数)

    
4.UITbleview可以有两种样式(Plain)和(Grouped)样式,一旦给tableView指定了样式之后就不能修改了;

    
5.UITableView很多方法都和NSIndexPath有关,NSIndexPath中存储的是当前你要使用的单元格(cell)所在分区的下标和所在分区中行的下标
   1.创建控件
   
UITableView
*tableView =
[[UITableView alloc]initWithFrame:[UIScreen mainScreen].bounds style: UITableViewStylePlain
];
 
 
 
  2.配置属性
 
  2.1配置单元格(cell)的高
   
tableView.rowHeight = 100;

   
 
  2.2配置cell分割线的颜色
   
tableView.separatorColor = [UIColor redColor];

   
 
  2.3配置cell
分割线的样式
   
tableView.separatorStyle =   
UITableViewCellSeparatorStyleSingleLine;

//UITableViewCellSeparatorStyleNone,

//UITableViewCellSeparatorStyleSingleLine,

//UITableViewCellSeparatorStyleSingleLineEtched

2.4.1配置tableView的表头(表头很重要,经常用来做轮播图)
//   
UIView *headerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0,
kScreenWidth, 50)];
//   
headerView.backgroundColor = [UIColor redColor];

   

   
  2.4.2.将准备的视图赋值给tableView的表头视图属性
//   
tableView.tableHeaderView = headerView;
 
   
2.5配置tableView表尾
//   
UIView *footView = [[UIView alloc]initWithFrame:CGRectMake(0, 508,
kScreenWidth, 40)];
//   
footView.backgroundColor = [UIColor cyanColor];
//   
tableView.tableFooterView = footView;

   
//快速去除多余单元格

//   
tableView.tableFooterView = [[UIView
alloc]init];

   

     2.6配置数据源代理





   
tableView.dataSource = self;
 
   2.7配置业务代理
   
tableView.delegate = self;
   
 
    
3.添加到父视图
   
[self.view addSubview:tableView];
 
    
4.释放
   
[tableView release];

   

   
//cell上有两个视图,一个是contentView
一个是accessoryView 而我们用到的cell属性
textLabel,detailTextLabel,imageView这些视图都是在contentView上,所以当我们自定义的控件放到contentView上
}
————————————————————————————————————
#pragma mark
tableView的数据源代理方法



 配置分区个数
-
(NSInteger)numberOfSectionsInTableView:(UITableView
*)tableView{

 
 
  根据数组元素的格式确定分区个数

//   
return self.bigArray.count;

 
  
    
根据字典键值对的个数确定分区的个数
   
return
self.dictionary.count;

}


 
返回每个分区对应的行数

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

   

   
  根据分区的下标找出大数组中小数组中元素

//   
return [self.bigArray[section]count];

   

   
//第一步:根据分区下的下标取出self.orderkey数组中存放的key值

NSString
*key =
self.orderkey[section];

   

   
//第二步:使用key取出字典中的value值(数组)并取出数组的元素个数

//   
[self.dictionary objectForKey:key];

   
return 
[self.dictionary[key]count];

}
——————————————————————————————

//在这个方法中创建单元格并对单元格配置数据

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

   

   
// UITableViewCell
单元格视图  继承自UIView 用来展示数据

//   
UITableViewCell *cell = [[[UITableViewCell
alloc]initWithStyle:UITableViewCellStyleValue1
reuseIdentifier:nil]autorelease];

#pragma mark cell的重用
   
//cell的重用是为了避免反复消耗资源,耗能达到节省内存的作业

//cell重用的步骤

//1.创建一个重用标识(重用ID),这个标识在cell创建的时候使用,也在从重用池取cell时判断使用

//面试题:使用static修饰重用标识的字符串变量,可以使其只被初始化一次,提高一下重用效率

static 
NSString
*identfier 
= @"cell";

   

   
//2.当需要一个单元格(cell)时,先去"重用池"中根据"重用ID"去查找有没有可以使用单元格

//如果有:直接从重用池中拿出来使用(修改单元格上的数据)

//如果没有:此时只能直接创建一个新的单元格

//tableView就是当前代理的委托人

UITableViewCell
*cell =
[tableView dequeueReusableCellWithIdentifier:identfier];

//3.判断是否成功取到可重用的cell

if (cell == nil) {// !cell 
一个意思

       
NSLog(@"=========");

       
cell = [[[UITableViewCell alloc]initWithStyle:(UITableViewCellStyleValue1)
reuseIdentifier:identfier]autorelease];
————————————————————————————————



 
 1.给cell的imageView属性赋值

   
cell.imageView.image = [UIImage imageNamed: @"11"];

   
//2.给cell的textLabel赋上文本内容

   
cell.textLabel.text = [NSString
stringWithFormat:@"%ld--%ld",indexPath.section,indexPath.row];

//3.给cell的detailLabel 赋上文本内容

   
cell.detailTextLabel.text = @"邓丽君";

   

    //4.设置cell 的右边界辅助视图

   
cell.accessoryType  =
UITableViewCellAccessoryDisclosureIndicator;

   
//   
cell.accessoryView = [[[UISwit ch alloc]init]autorelease];

   
//自定义辅助视图

       
UIView *accessoryView =[[UIView alloc]initWithFrame:CGRectMake(0,
0, 40, 20)];

       
accessoryView.backgroundColor = [UIColor redColor];

       
cell.accessoryView = accessoryView;

   

//       
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(300, 0, 20,
cell.frame.size.height)];

//       
view.backgroundColor = [UIColor orangeColor];

       
[cell addSubview:view];
   
}
——————————————————————————————



//配置每个分区的页眉,叫区头也可以

- (NSString *)tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section{
//   
if (0 == section) {
//       
return @"L";
//   
}else if (1 == section){
//       
return @"W";
//   
}else{
//       
return @"Z";
//   
}

   
//根据排好序的数组返回区头

   
return
self.orderkey[section];

}
//配置分区的右侧的分区索引,区头的顺序和数组中的元素一致

- (NSArray *)sectionIndexTitlesForTableView:(UITableView
*)tableView{
//   
return @[@"F",@"S",@"G"];

   

   
//根据排好序的数组设置右侧分区索引

 return self.orderkey; 
 
}
//配置每个分区的页脚,叫区尾也可以

- (NSString *)tableView:(UITableView *)tableView
titleForFooterInSection:(NSInteger)section{

   
return
@[@"f",@"s",@"l"][section];

}

- (void)didReceiveMemoryWarning {

   
[super
didReceiveMemoryWarning];

// Dispose of any
resources that can be recreated.

}
————————————————————————————————
#define
kScreenWidth     [UIScreen
mainScreen].bounds.size.width

#import "DetailViewController.h"

@interface
RootViewController
()<</span>UITableViewDataSource,UITableViewDelegate>

@property(nonatomic,retain)NSArray
*bigArray;
@property(nonatomic,retain)NSDictionary
*dictionary;
@property(nonatomic,retain)NSArray
*orderkey;
@end

@implementation
RootViewController

- (void)dealloc{

self.bigArray
=
nil;

self.dictionary
=
nil;

self.orderkey
=
nil;

[super
dealloc];

}
   
NSArray *lArr = @[@"李白",@"李妹",@"李舒缓",@"梨花"];

   
NSArray
*zArr =
@[@"张波",@"涨姿势",@"张紫琴"];

   
NSArray
*wArr =
@[@"王小波",@"王伟",@"王小二"];
//   
self.bigArray = @[lArr,zArr,wArr];

   

   
self.dictionary = @{@"L":lArr,@"Z":zArr,@"W":wArr};

   
//取出字典中所有的key值

NSArray
*keys =
self.dictionary.allKeys;

   
//将排好序的key值赋值给self.orderkey

  
self.orderkey = [keys sortedArrayUsingSelector:@selector(compare:)];
——————————————————————————————————

#pragma mark
tableView的业务代理方法
//返回cell的行高

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

   
if (0 != indexPath.row % 2) {

       
return
80;

   
}else{

   
return
200;

   
}

}
//触发时机
:点击cell的时候会触发,所以要完成点击cell跳转到其他页面,方法实现写在这个方法中

- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//   
NSLog(@"%ld --
%ld",indexPath.section,indexPath.row);

   
DetailViewController
*detail =
[[DetailViewController
alloc]init];

   
detail.textString = [NSString stringWithFormat:@"%ld -- %ld",indexPath.section,indexPath.row];
   
[self.navigationController
pushViewController:detail
animated:YES];
   
[detail release];
}


//触发时机:点击一个cell之后,在点击其他的cell时触发

- (void)tableView:(UITableView *)tableView
didDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0){

//NSLog(@"%ld --
%ld",indexPath.section,indexPath.row);  
}
#pragma mark
从数组中取数据展示
   
//1.先取出大数组中的元素
   
NSArray
*nameArray =
self.bigArray[indexPath.section];

   
//2.从nameArray取出名字

NSString
*name =
nameArray[indexPath.row];
//   
NSLog(@"%@",name);

   

   
//3.将给出来的名字赋值给cell.textLabel.text

   
cell.textLabel.text = name;
   
cell.imageView.image = [UIImage imageNamed:@"11"];

   

#pragma mark
从字典中取出数据显示
   
//1.根据分区下标取出self.order
中的元素

   
NSArray
*key =
self.orderkey[indexPath.section];

   

   
//2.取出key值在字典中对应的数字

NSArray
*names =
self.dictionary[key];

   

   
//3.根据行下标取出数组中的名字,并赋值给textLabel.text

   
cell.textLabel.text =
names[indexPath.row];
最终效果图:



——————————————————————————————



 
 欢迎学习本文,未经博主许可禁止转载!

UITableViewBase&nbsp;UI_09的更多相关文章

随机推荐

  1. 58. Length of Last Word(easy, 字符串问题)

    Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...

  2. C++ 程序在运行时不显示dos界面

    在程序最开始处加一句: #pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" ) PS: 在VS中 ...

  3. JSON 封装函数

    var eventUtil = { addHandler:function(element,type,handler) { //添加句柄 if(element.addEventListener) { ...

  4. 深入理解DirectByteBuffer

    介绍 最近在工作中使用到了DirectBuffer来进行临时数据的存放,由于使用的是堆外内存,省去了数据到内核的拷贝,因此效率比用ByteBuffer要高不少.之前看过许多介绍DirectBuffer ...

  5. python复杂网络库networkx:绘图draw

    http://blog.csdn.net/pipisorry/article/details/54291831 networkx使用matplotlib绘制函数 draw(G[, pos, ax, h ...

  6. 安卓高级 Android图片缓存之初识Glide

    前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...

  7. mongo 写分析

    写操作 复制集 mongo所有的节点都是写入到primary节点,同时写入oplog,secondary 节点会持续的从primary节点上复制oplog的信息,然后根据oplog写数据.second ...

  8. 【mybatis深度历险系列】延迟加载

    在前面的博文中,小编主要简单的介绍了mybatis中的高级映射,小伙伴们可以把mybatis和hibernate的因素进行对比,更加有利于理解.今天这篇博文,小编主要来简单介绍一下mybatis中的延 ...

  9. SQL Join各种内联外联说明

    Visual Representation of SQL Joins C.L. Moffatt, 3 Feb 2009 CPOL    4.96 (406 votes) Rate this: This ...

  10. FORM开发实现动态LOV

    方法一.设置lov的记录组 IF :mat_trx.trx_action_id = 1 THEN set_lov_property('lot_number',group_name,'lot_issue ...