UITableView的使用方法和示例

注:本文为原创,转载请注明出处。来自CSDN,作者:Midfar Sun

相信很多人在开发时都需要用到UITableView,包括UITableViewCell的显示,以及对数据增删改查操作。可惜的是苹果官方在这方面的示例很少,而UITableView可以说是使用最复杂的一个控件,很多的坑。这里,我就写了一个Demo,展示了相关的使用方法,包括Cell的添加、修改、删除、移动。示例程序从这里下载:

https://github.com/midfar/iOSLibrary/tree/master/MFTableDemo

下面,我就来对Demo实现的功能做一些讲解,以及开发中要注意的一些问题。

1. TableView的数据显示。

相信很多人都很熟悉了,这里就不多说,直接上代码,关键是实现:

//Cell的个数

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

//每个Cell的UI,界面显示在Main.StoryBoard的Cell中定义,注意在这里有标注Identifier=Cell

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

//这里返回每一个Cell的高度

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

//用户选择了Cell需要执行的动作

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

2. 删除Cell。

如果设置了isSupportSingleDelete=YES,那么在列表页面下,从右往左滑动Cell,会出现一个Delete按钮,点击即可删除该Cell。

//必须return YES 才会出现删除按钮

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

用户点击右上角的Edit按钮后,进入编辑模式,这里通过设置isSupportMutiDelete变量,可以支持多项删除。

mTableView.allowsMultipleSelectionDuringEditing = isSupportMutiDelete;

如果设置为YES,那么需要自己定义一个Delete按钮,在用户点击Cell后记录下来选中项,并在点击Delete按钮后实现相应的删除方法。

注意:移动Cell后会导致记录的indexPath不正确,因此移动后要修改选中的记录。

3. 移动Cell。用户点击右上角的Edit按钮后,进入编辑模式,用户可以对每个Cell进行移动操作。

[mTableView setEditing:!isSelected animated:YES];

//必须return YES 才能移动

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;

//设置可移动的Cell

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;

//用户将cell从src位置拖动到dest位置后,会触发该回调

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;

4. 编辑Cell。用户点击Cell中的文字,将会弹出键盘,可对相关内容进行修改。

点击Next后,如果下一项存在,则会自动跳到下一项。这里要注意TableView的动画问题。

5. 到最后一项后,如果用户继续输入内容,再回车,则会添加新的Cell用于创建新数据。

开发中要注意的问题:

1. 直接对UITableViewCell 设置 showsReorderControl 属性,在部分iOS系统下没效果

2. 在tableView:editingStyleForRowAtIndexPath: 中如果对不同的Cell设置不同的EditingStyle,会导致Cell重用时UI显示问题

3. 在编辑模式下,键盘弹出时,移动Cell后如果不reloadData,会导致Cell重用时UI显示问题

在键盘弹出时,很多功能的使用会造成UI上的显示问题,开发时要避免相应情况的出现

4. 在键盘弹出时,需要动态调整UITableView的内容区域高度,我这代码中用到了MFKeyboardAvoidingTableView。

5. 为了更好的用户体验,在移动、删除时,尽量不要reloadData,避免没有相关的动画

6. 对于用户的输入,要实时保存下来,避免数据丢失。这里用到了 textField:shouldChangeCharactersInRange:replacementString:

时间: 2024-10-19 04:00:23

UITableView的使用方法和示例的相关文章

UITableView属性和方法

1.初始化一个UITableView 1 - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style 1 struct CGRect { 2 CGPoint origin; 3 CGSize size; 4 }; 5 typedef struct CGRect CGRect; 1 typedef enum { 2 UITableViewStylePlain, //平铺样式 3 UITableViewStyleGrouped //

C# 使用多线程如何传递两个以上参数的实现方法(附示例)

某些情况下当我们启动一个线程的时候会向该线程传递参数,有时除了功能上需要之外,我觉得还有就是为了我们能管理好启动的线程组(当然,只开一两个线程什么的也谈不上不好管理了,我说的线程组是指10+的线程,我们很难去主动控制的). 因为刚接触C#,所以还没有在C#下用过多线程去实现某些功能.通过学习我发现单纯的去启动线程很容易,反而是想要往线程中传一些参数变得有点说道了,这里我想说传入参数的数量为>=2.不过我们还是一步一步的来,带大家过一遍C#下的多线程怎么搞. 以上一篇讲的网络通信的例子,把整个过程

[OC][转]UITableView属性及方法大全

Tip: UITableView属性及方法大全  (摘录地址) p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 14.0px; font: 12.0px Times; min-height: 14.0px } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 14.0px; font: 12.0px "Songti SC" } p.p3 { margin: 0.0px 0.

UITableView 基本使用方法总结

1.   首先,Controller需要实现两个  delegate ,分别是  UITableViewDelegate 和  UITableViewDataSource 2.然后 UITableView对象的 delegate要设置为 self. 3. 然后就可以实现这些delegate的一些方法拉. (1)- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 这个方法返回 tableview 有多少个sectio

iOS开发UITableView基本使用方法总结1

UITableView基本使用方法 1.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDataSource 2.然后 UITableView对象的 delegate要设置为 self. 3.然后就可以实现这些delegate的一些方法拉. (1)- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 这个方法返回 tableview 有多

iOS开发UITableView基本使用方法总结

本文为大家呈现了iOS开发中UITableView基本使用方法总结.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITableViewDataSource:然后 UITableView对象的 delegate要设置为 self:然后就可以实现这些delegate的一些方法拉. UITableView基本使用方法 1.首先,Controller需要实现两个delegate ,分别是UITableViewDelegate 和UITable

Odoo国际化翻译方法及示例介绍

本文主要介绍了odoo国际化翻译使用的方法及示例 国际化翻译方法 每个模块的翻译文件放在该模块目录下i18n目录里.模块内相关字符串一般用英语写成,然后通过翻译模板导出功能(Settings ? Translations ? Import/Export ? Export Translation)导出一个翻译模板pot文件.翻译人员使用翻译软件(poedit)进行翻译后,产生对应语言po文件,再放入i18n目录下供odoo加载.po文件的文件名规则一般由对应语言缩写或语言_国家组成,如中文为zh.

自定义UITableview 两种方法

第一: #import "ViewController.h" @interface ViewController () { UITableView *tableview; } @property(nonatomic,strong) NSMutableDictionary *names; @property(nonatomic,strong)NSArray *keys; @end @implementation ViewController -(NSInteger)numberOfSec

重写equals和hashCode方法的示例

如果一个类有自己特有的"逻辑相等",且需要以此进行比较时,那么就需要重写equals方法. 在Object的规范中,重写equals方法有下面几条通用约定: 自反性. x.equals(x) == true 对称性.if   y.equals(x) == true , then  x.equals(y) == true 传递性.if   x.equals(y) == true y.equals(x) == true , then x.equals(z) == true 一致性.如果比较