iOS开发学习总结——UITableView使用初步
2017-01-06 12:30
405 查看
一、UITableView概述
UITableView是iOS开发中最常用的控件之一,大多数应用程序中使用UITableView作为列表来展示内容。UITableViewController中包含了一个UITableView,它和UIViewController的区别还不是很清楚,目前只知道UITableViewController是从UIViewController继承而来。还请大神指点。
UITableView的属性常用的有两个,一个是它的Content,Dynamic Prototypes是可以滚动的可重用的列表,而Static Cells是静态的列表。还有一个属性是Style,可以选择Plain(类似于通讯录的样式,用于显示搜索结果等)和Grouped(类似与系统设置的样式,用于显示菜单等)。还有关于分割线的一些属性。
二、UITableViewCell和NSIndexPath
UITableViewCell对应的是单元格,在Dynamic Prototypes模式下,UITableViewCell是要求可以重用的,所以在这种情况下不能用@IBOutlet将变量和视图中的Cell进行关联。在Static Cells模式下应该可以,不过用的比较多的还是Dynamic Prototypes模式。
UITableViewCell包含了一个Title和一个Details,分别对应单元格的主标题和说明,二者都是UITextLabel*类型,还包括了一个位于左侧的imageView和位于右侧的accessoryView,类型分别为UIImageView和UIView,左侧可放入图像,右侧可以放入任意的控件(开关,选择框等)。
在UITableViewCell的构造方法中,需要指明Style和reuseIdentifier(重用标识符)。
NSIndexPath是一个类似于二维数组的类型,其中成员section是确定了单元格所在的分组,而成员row是确定了单元格在所在分组中的位置,主要用于cellForRowAtIndexPath:和didSelectRowAtIndexPath:这两个方法。
三、UITableView的数据源协议(UITableViewDataSource)
UITableViewDataSource是UITableView的一个协议,其中包含了关于UITableView的布局、数据源等方面的一些方法,常用的有如下几个:
指定列表中分组的个数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
指定每个分组的标题(section参数代表分组号)
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
指定每个分组的说明(section参数代表分组号)
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
指定每个分组中单元格的个数(section参数代表分组号)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
加载每个单元格的时候都会调用的方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
点击每个单元格的时候都会调用的方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(nonnull NSIndexPath *)indexPath
其中cellForRowAtIndexPath:方法使用的及其频繁,为了提高运行效率,需要对UITableViewCell进行重用,在用户把某个单元格滑动出界面的时候,iOS会自动将该单元格放入缓存中。所以我们想要重用的话只需要尝试从缓存中取出单元格即可,一般情况下只需要编写如下代码:
NSString *identifier=@"UITableViewCellIdentifier"; //重用标志
UITableViewCell *cell=[_settingsTableView dequeueReusableCellWithIdentifier:(identifier)];
//先尝试从缓存池中取出已经加载的单元格
if(cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:(identifier)];
//如果缓存池中不存在该单元格,则加载该单元格
}
其中第一个NSString*是一个重用标识符,dequeueReusableCellWithIdentifier:方法会首先尝试从缓存池中取出已加载的单元格,如果没有取出,则返回nil。再用if语句判断是否成功取出,如果未取出则需要创建这个单元格(否则会出现空指针异常),创建一个单元格用到的方法是initWithStyle:reuseIdentifier:,其中reuseIdentifier就是之前定义的重用标识符。同时还经常使用下面的方法setSelectionStyle:(UITableViewCellSelectionStyle),其中可以传入参数UITableViewCellSelectionStyleNone,作用是禁止点击该单元格,默认情况下单元格是可以被点击的。还有可以设置是否允许重新排列和是否允许删除单元格的方法,默认值都是不允许。
在调用didSelectRowAtIndex
4000
Path:方法时,只需要根据不同的单元格进行不同的操作即可,其中经常使用的方法是:deselectRowAtIndexPath:(indexPath) animated:(YES),此方法可以使点击产生的高亮条立即消失,不然的话单元格会一直亮着,好像卡住了一样,影响用户体验。
UITableView是iOS开发中最常用的控件之一,大多数应用程序中使用UITableView作为列表来展示内容。UITableViewController中包含了一个UITableView,它和UIViewController的区别还不是很清楚,目前只知道UITableViewController是从UIViewController继承而来。还请大神指点。
UITableView的属性常用的有两个,一个是它的Content,Dynamic Prototypes是可以滚动的可重用的列表,而Static Cells是静态的列表。还有一个属性是Style,可以选择Plain(类似于通讯录的样式,用于显示搜索结果等)和Grouped(类似与系统设置的样式,用于显示菜单等)。还有关于分割线的一些属性。
二、UITableViewCell和NSIndexPath
UITableViewCell对应的是单元格,在Dynamic Prototypes模式下,UITableViewCell是要求可以重用的,所以在这种情况下不能用@IBOutlet将变量和视图中的Cell进行关联。在Static Cells模式下应该可以,不过用的比较多的还是Dynamic Prototypes模式。
UITableViewCell包含了一个Title和一个Details,分别对应单元格的主标题和说明,二者都是UITextLabel*类型,还包括了一个位于左侧的imageView和位于右侧的accessoryView,类型分别为UIImageView和UIView,左侧可放入图像,右侧可以放入任意的控件(开关,选择框等)。
在UITableViewCell的构造方法中,需要指明Style和reuseIdentifier(重用标识符)。
NSIndexPath是一个类似于二维数组的类型,其中成员section是确定了单元格所在的分组,而成员row是确定了单元格在所在分组中的位置,主要用于cellForRowAtIndexPath:和didSelectRowAtIndexPath:这两个方法。
三、UITableView的数据源协议(UITableViewDataSource)
UITableViewDataSource是UITableView的一个协议,其中包含了关于UITableView的布局、数据源等方面的一些方法,常用的有如下几个:
指定列表中分组的个数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
指定每个分组的标题(section参数代表分组号)
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
指定每个分组的说明(section参数代表分组号)
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
指定每个分组中单元格的个数(section参数代表分组号)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
加载每个单元格的时候都会调用的方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
点击每个单元格的时候都会调用的方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(nonnull NSIndexPath *)indexPath
其中cellForRowAtIndexPath:方法使用的及其频繁,为了提高运行效率,需要对UITableViewCell进行重用,在用户把某个单元格滑动出界面的时候,iOS会自动将该单元格放入缓存中。所以我们想要重用的话只需要尝试从缓存中取出单元格即可,一般情况下只需要编写如下代码:
NSString *identifier=@"UITableViewCellIdentifier"; //重用标志
UITableViewCell *cell=[_settingsTableView dequeueReusableCellWithIdentifier:(identifier)];
//先尝试从缓存池中取出已经加载的单元格
if(cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:(identifier)];
//如果缓存池中不存在该单元格,则加载该单元格
}
其中第一个NSString*是一个重用标识符,dequeueReusableCellWithIdentifier:方法会首先尝试从缓存池中取出已加载的单元格,如果没有取出,则返回nil。再用if语句判断是否成功取出,如果未取出则需要创建这个单元格(否则会出现空指针异常),创建一个单元格用到的方法是initWithStyle:reuseIdentifier:,其中reuseIdentifier就是之前定义的重用标识符。同时还经常使用下面的方法setSelectionStyle:(UITableViewCellSelectionStyle),其中可以传入参数UITableViewCellSelectionStyleNone,作用是禁止点击该单元格,默认情况下单元格是可以被点击的。还有可以设置是否允许重新排列和是否允许删除单元格的方法,默认值都是不允许。
在调用didSelectRowAtIndex
4000
Path:方法时,只需要根据不同的单元格进行不同的操作即可,其中经常使用的方法是:deselectRowAtIndexPath:(indexPath) animated:(YES),此方法可以使点击产生的高亮条立即消失,不然的话单元格会一直亮着,好像卡住了一样,影响用户体验。
相关文章推荐
- 【ios开发学习 - 第五课】UITableView使用
- UITableView---iOS开发的常用控件使用总结
- IOS开发学习笔记027-UITableView 使用模型对象
- iOS开发总结之项目开发中使用UITableView几百行代码搞定级联表格
- IOS 开发学习30 UITableView的使用总结
- iOS开发之UITableView使用总结
- IOS开发学习笔记026-UITableView的使用
- 【IOS 开发学习总结-OC-51】★★★ios开发之UI控件——UITableView 与UITableViewCell
- iOS开发总结之项目开发中使用UITableView自定义多级表格&自定义cell
- 学习IOS开发UI篇--UITableView中Cell的创建方式总结
- IOS学习笔记(十二)之IOS开发之表视图(UITableView)的讲解与使用(二)
- 学习IOS开发UI篇--UI知识点总结(四) UITabelView/UITableViewCell
- iOS开发 -- UITableView 完整知识点总结(一)
- iOS开发 UITableView的方法和属性总结
- 学习IOS开发UI篇--UICollectionViewController的基本使用
- IOS 学习:UITableView使用详解2 自定义的单元格
- IOS学习:UITableView使用详解3 分组表的简单使用
- iOS开发知识点汇集四 —— UITableView的使用
- iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)
- 学习IOS开发UI篇--UI知识点总结(二) UILabel/UIImageView