DAY07
回顾:
1》 UITableView
1.一列多行
2.表格的样式有两种:Plain和Group
3. 包含的部分:
+表头视图
+分区头
+分区内容
+分区尾
+表尾视图
4.使用步骤:
a.在View中添加tableView
b.设置当前的frame
c.设置实例的委托 tableView.datasource=self tableview.Delegate=self
d.遵守协议< UITableViewDataSource,UITableViewDelegate >
e.把tableView给当前控制的控制器视图
f.实现三问一答
2》UITableViewController
自己写一个类
1.控制器自带一个tableView
2.已经遵守了协议
3.控制器已经成为自带的表视图的数据源代理和对象代理
4.实现三问一答
———————————————————————————————————————-
1 多分区的表视图
2 NSIndexPath类型
该类型描述的是一种路径,为了定位一个单元格的位置,需要两个值;每一个分区的内部排列规则都是从0开始的。
属性:
.section记录分区的分区号
.row记录的是行在每个分区内的行号
3 表格其他属性
3.1 表头视图 表尾视图
一个表中只能有一个表头和表尾
通过下列属性进行设置:
self.tableView.tableFooterView
self.tableView.tableHeaderView
3.2 分区头 分区尾
一个表格可以有多个分区头,分区尾 通过回答问题进行设置,分区头 分区尾可以是简单字符串也可以是复杂的UIView
-(NSString*)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
-(UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
4 UITableViewCell
4.1 是什么?
系统定义的单元格类型,表格中的每一个都是一个UITableViewCell的实例
4.2 单元格具有系统提供的默认的样式
系统提供了四种不同的样式摆放
四种样式:
UITableViewCell *cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue2
reuseIdentifier:@"cell"];
UITableViewCellStyleDefault,//默认的 简单单元格有一个文本 和一个可以选择的image View
UITableViewCellStyleValue1, //左对齐 文本在左边 cell.detailTextLabel 在右边对其并且颜色为blue
UITableViewCellStyleValue2,//右对齐 文本在右边cell.detailTextLabel 在左边对其并且颜色为blue
UITableViewCellStyleSubtitle//文本在左边对其cell.detailTextLabel 在文本的下方颜色为blue
4.3 单元格具有系统提供的默认的组成视图
.tableLable标签
.detailTextLable详情标签
.ImageView视图标签
设置行的高度:
--(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
5 单元格的重用(行)
5.1 是什么?
将完整的超出屏幕的单元格存到队列之中,屏幕一旦出现空白区域,需要单元格填充时。先从队列中按照指定的标签来试取,看有没有已经使用完并存在队列之中的单元格,有就拿出来修改值后,重新加载到界面之中,如果没有就新建单元格。
5.2 如何实现单元格的重用
前提:超出屏幕的单元格已经自动插到对列之中
具体做的内容:在回答每行的内容是什么样的时候先尝试着从对列中取单元格对象,取得结果有两种:要么取到,拿来继续使用。要么取不到可以重用的,那么自己新建即可。
方法一:
手动创建单元格重用
1. 先尝试着从队列中取cell
2. 判断取出的是否为nil
3. 如果是空 则明确创建一个cell
方法二:
系统负责创建指定样式的cell对象
1. 在ViewDidLoad中先tableView注册cell类
[self.tableView registerClass:[UITableViewCell class][email protected]"cell"]
2. 在生成的cell方法中直接从队列中按照指定的样式查找
注意:存到队列之中的单元格可以有多重的样式,所以每一种进入队列的单元格都需要给一个标示,去队列中取单元格时,也要按照某种标示取对象。
6 三问一答的一答
6.1 推出简单的VC来显示数据详情:
a. 数据结构:
+Arear :NSObject
+name :NSString
+population :NSInteger
要求:
1. 有一组城市信息,以tableView的形式来展示所有城市
2. 选中某一城市后推出新的VC显示城市的名字和人口
思路:创建一个基本数据类继承于NSObject起名为Arear 定义两个属性一个初始化方法和一个数据列
创建一个继承tableViewController的控制器导入基本数据类定义一个城市数组 根据row来判断是哪一个城市
6.2 推出tableView来显示子数据
a. 数据结构:
+Arear :NSObject
+name :NSString
+population :NSInteger
+areas(区域) :NAArray(NSString)
要求:
1. 有一组城市信息,以tableView的形式展示所有城市
2. 选中某一城市后推出新的tableViewController显示城市的所有areas信息;
7 向TableView中加一行数据
数据结构:
+Arear :NSObject
+name :NSString
+population :NSInteger
要求:
a。第一个界面使用tableView展示所有的城市信息
b。城市名称在单元格的左侧显示
c。城市的人口在单元格的右侧显示
d。在导航栏的右上角有一个加号按钮,点击这个加号后,推出一个新的普通vc
e。在推出的界面2中,包含两个文本框,一个用于输入新的城市名称,一个用于输入该城市的人口数
f。界面2中下方有一个保存按钮,点击保存按钮后,返回到界面1,并且将在界面2中输入的数据回传到界面1,保存在界面1中用于存放所有城市信息的数组中
g。同时,更新表格,显示增加完城市信息后的新数据(注:如何刷新整个表格?[ self.tableView reloadData];)
练习:
1.照片查看器
在一个TableView中列出所有照片的缩小图、照片名称和拍摄的位置。当用户点击某一行时,推出一个vc,在此vc中显示大的图片,大的图片允许缩放。
复习:协议的使用
协议的定义:
1.协议名:类名+Delegate
2.方法的第一个参数一定是委托方自己
3.方法尽量体现调用的时机
@protocol InputViewControllerDelegate <NSObject>
-(void)inputViewController:(InputViewController*)inputVc inputFinishedWithMessahe:(NSString*)message;
@end
添加一个公开的Delegate方法
@property(nonatomic,weak)id<BViewControllerDelegate> delegate;
合适的时机给代理发消息
照片的缩放
1.定义一个UIImage的实例image
2.定义一个UIImageView的实例并把image赋给UIImageView
3.定义一个UIScroceView的实例并把imageView赋给UIScroceView
4.定义一全局的UIImageView并把imageView
5.遵守协议
6.实现方法