在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信、QQ等软件上随处都是UITableView。
1,UITableView基本样式
(1):UITableViewStylePlain(普通表视图)
(2):UITableViewStyleGroup(分组表视图)
2,UITableView表视图的结构
(1):表头视图(table header view).表视图最上边的视图,用于展示表视图的信息
(2):表脚视图(table footer view).表视图最下边的视图,用于展示表视图的部分信息
(3):单元格(cell)。它是组成表视图每一行的单位视图
(4):节(selection)。它是多个单元格在组成,并且有节头和节脚
(5):节头。节的头部,描述节的信息
(6):节脚.节的尾部,描述节的信息或者一些声明信息
3,表视图的创建
ios表没有限制行数,行数仅受可用存储空间的限制,表只有一列。是UITableView类的一个实例。
(1)Controller.h需要实现两个 delegate ,分别是UITableViewDelegate 和 UITableViewDataSource
@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
(2)UITableView对象的 delegate和dataSource要设置为 self,并添加至view。
tableView.delegate = self; tableView.dataSource = self; [self.view addSubview:tableView];
(3)然后就可以实现这些dataSource和delegate的一些方法。
4,dataSource和delegate
UITableView属于View,UIViewController属于Controller。
View所需要的数据,应该是Controller去跟Model协调然后获得,以后由Controller去给View来进行显示。View永远的不去直接跟Model联系。
这样当UITableView初始化的时候。他就会去问他的data source。我需要显示多少行数据啊。每一行的数据都是什么内容啊。这时候UIViewController应该已经从Model拿到了数据。
然后,通过- (NSInteger)tableView:(UITableView )tableView numberOfRowsInSection:(NSInteger)section; 告诉UITableview,你的这一组要显示n条数据。 又用- (UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath )indexPath函数 告诉UITableView说,第几组第几条数据的具体内容是什么。
5,UITableViewDataSource常用方法
(1),必须实现 设置每个分组的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
(2),必须实现, 设置每个分区的cell
- (UITableViewCell *)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath // 每行都是一个UITableViewCell实例
(3),设置分组个数 默认返回1 第一个被调用
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
(4),为每个分组设置标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
(5),为分组设置索引
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
(6),设置tableView每组的编辑状态
- (BOOL)tableView:(UITableView *)tableView canEditRowA tIndexPath:(NSIndexPath *)indexPath
(7),当提交编辑操作时触发(插入或删除)
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyleforRowAtIndexPath:(NSIndexPath *)indexPath
(8),设置tableView每一个cell是否允许移动
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
(9),提交移动操作之后触发
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
6,UITableViewDelegate常用方法
(1),设置行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
(2),设置cell选中的事件
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
(3),设置tableViewCell的编辑样式(插入,删除)
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath*)indexPath
(4),设置当点击删除按钮时提示的确认文字
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0)
(5),设置cell的移动位置
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath*)proposedDestinationIndexPath{ //现在移动时只能在本区内移动 //sourceIndexPath原地址 //proposedDestinationIndexPath将要移动到的地址 if(sourceIndexPath.section == proposedDestinationIndexPath.section) { //如果是同一个分区,返回目的地址 returnproposedDestinationIndexPath; } //如果不是同一个分区,返回原来的地址 returnsourceIndexPath; }
7,UITableViewCell
(1)UItableViewCell的四种风格常量:
UITableViewCellStyleDefault UITableViewCellStyleSubtitle UITableViewCellStyleValue1 UITableViewCellStyleValue2
(2)表视图中cell的实现:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:Cell];
}
return cell;
}
(3)重用机制:UITableView的dequeueReusableCellWithIdentifier方法去一个队列里面需找有没有相同ID的的Cell。如果有,就提出来重用。如果没有就跳进if里面去创建。所以我们在if里面创建的时候,不会改变的内容都可以在里面创建,这样就只用创建一次。需要改变的内容我们就放到if后面去写。 这样我们就能完成高效的UITableView。当然,理论上来说,你可以不用这样的机制,而去直接每次创建一个Cell。不过这是非常浪费资源的一个做法,不提倡。
我们可以这样理解, dequeueReusableCellWithIdentifier方法 就是用来创建几个有限的cell。 其实,手机屏幕再大,可显示的行数也是有限的。 或许,一个TableView 的数据来源有可能是上千条数据,但我们不会为此创建上千个Cell,如果这样做,对内存将是一个极大的浪费。所以呢, 我们通过dequeueReusableCellWithIdentifier方法,重用已经创建的Cell, 只需要填充不同的数据即可。
相关推荐
iOS 开发中 UITableView 的使用详解 UITableView 是 iOS 开发中最常用的控件之一,用于显示列表数据。它类似于 Android 中的 ListView,都是用于显示列表数据的控件。在 iOS 开发中,UITableView 是一个非常重要的...
本教程将深入讲解UITableView的基本用法,包括创建、配置、数据源与代理方法、Cell的重用机制以及AutoLayout的应用。 首先,创建UITableView非常简单,既可以通过代码创建,也可以在Storyboard中拖拽添加。在代码中...
在本教程中,我们将深入探讨如何使用Objective-C实现UITableView的基本功能,并探讨性能优化策略。 首先,我们来看一下如何创建一个简单的英雄展示程序。在NJHero.h文件中,定义了一个NJHero类,该类用来存储每个...
本示例将深入探讨UITableView的基本使用方法,帮助开发者理解和掌握其核心功能。 首先,UITableView由两部分组成:数据源(DataSource)和委托(Delegate)。数据源负责提供单元格的内容,而委托则处理用户与表格的...
本教程将深入探讨UITableView的简单使用,帮助开发者快速掌握其核心概念和基本功能。 首先,UITableView是由两部分组成:数据源(DataSource)和委托(Delegate)。数据源负责提供单元格内容,而委托则处理用户与...
首先,让我们理解UITableView的基本工作原理。UITableView是由多个UITableViewCell组成的,每个Cell可以视为列表中的一个条目。当你滚动UITableView时,系统会自动重用已滑出屏幕的Cells,以提高性能。因此,理解...
本教程将深入探讨UITableView的使用,特别是针对iPhone应用开发。在第一部分中,我们将着重理解UITableView的基本概念,设置数据源,创建自定义Cell以及如何进行数据绑定。 首先,UITableView是一种控件,用于展示...
5. **UITableViewCell**:这是用于填充UITableView的基本单元。每个单元格都可以自定义,包括文本、图像、开关等。通过重写`awakeFromNib`方法或使用Interface Builder可以实现定制。 6. **Nibs和Storyboard**:在...
首先,我们要了解`UITableView`的基本结构。`UITableView` 是一个视图对象,负责显示一系列行,每行可以是可自定义的`UITableViewCell`。`UITableViewCell` 内容可以根据需求进行定制,包含图片、文本、按钮等元素。...
除了基本的单列列表,UITableView还可以创建多列布局,或者添加可滑动的表头和表尾视图。这需要自定义数据源方法来配置。 9. 自定义分割线: 通过修改`separatorStyle`和`separatorInset`属性,可以调整表格的...
本教程将带你入门iPhone上的UITableView使用,通过一个简单的示例项目"**MyTableView**"来深入理解其工作原理和基本操作。 首先,UITableView的主要组成部分包括:表头(HeaderInSection)、表尾(FooterSection)...
2. **通知UITableView**:在修改了数据源后,需要调用`reloadData`方法或者使用`insertRows(at:with:)`方法通知UITableView刷新特定行或插入新行。 3. **更新Cell**:UITableView会在需要时调用`cellForRowAt`方法,...
这个“IOS iphone UITableView简单例子”是一个基础的教程,旨在帮助开发者理解如何在iPhone应用中实现UITableView的基本功能。在这个项目中,我们将会看到如何创建两个不同的表视图区域,并且在用户点击某一行时弹...
总的来说,“UITableView Demo”项目涵盖了UITableView的基本使用,包括数据源的配置、单元格的创建与复用、用户交互的处理,以及可能的自定义单元格设计。通过学习这个Demo,开发者能够更好地理解和运用UITableView...
首先,我们需要理解UITableView的基本工作原理。UITableView是由一个个UITableViewCell组成的,每个单元格对应数据模型中的一个条目。当用户滚动表格时,UITableView会根据需要复用这些单元格,以提高性能。因此,...
首先,`UITableView`的基本使用涉及到以下几个核心概念: 1. **DataSource**:`UITableViewDataSource`是`UITableView`的数据源协议,你需要实现它来提供单元格的数量和每个单元格的内容。例如,`...
首先,我们来了解一下UITableView的基本概念。UITableView是一个视图控件,用于显示一列或多列数据,每个单元格(UITableViewCell)代表一个数据项。它提供了可滚动的界面,使用户能够查看大量信息而不必占据屏幕的...
首先,我们需要理解UITableView的基本概念。UITableView是一个可滚动的视图,可以显示一行行的数据,这些数据通常来自一个数据源(如数组或数据库)。每个单元格(cell)都可以自定义以适应不同的展示需求。 在`...
在iOS开发中,UITableView是用于展示列表数据的关键组件。当你想要实现一个功能,让用户...总的来说,通过组合使用UITableView的Delegate方法和手势识别器,你可以实现丰富的用户交互,包括自定义的横向滑动触发事件。
首先,我们来探讨`UITableView`的基本概念。UITableView是一个可滚动的控件,可以显示一行行的数据,这些数据由UITableViewDataSource提供。DataSource是必须遵循UITableViewDataSource协议的对象,它负责告诉...