UITableView的简单使用过程

简单介绍

  两种样式

    UITableViewStylePlain

    UITableViewStyleGrouped

数据显示需要设置数据源,数据源是符合遵守协议 <UITableViewDataSource>的类

数据源

  dataSource

一些UITableViewDataSource协议里写好的类,这些类有系统自动调用,调用顺序是先设置组再设置行最后设置行内容

设置组section,直接将组返回

  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

设置行,直接返回行

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

设置行内容,直接返回UITableViewCell对象

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

设置组标题(头部),返回头部标题

  - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

设置组描述(尾部),返回尾部描述

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

其中indexPath包含两个数据一个是section一个是row,也就是每一行数据的位置,表示第几组第几行

具体用法看下面的代码

1、创建一个UITableView对象,并设置数据源

     // 创建一个UITableView
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
tableView.dataSource = self; // 设置数据源
[self.view addSubview:tableView]; // 添加到视图

既然数据源是self,那么这个类必须遵守协议:UITableViewDataSource,在这个类扩展上遵守协议即可

 @interface SLQViewController () <UITableViewDataSource> // 遵守协议

 @end

2、设置组

将待添加数据到数组中

 @interface SLQViewController () <UITableViewDataSource> // 遵守协议
{
NSArray *_property; // 属性
NSArray *_location; // 位置
}

在viewDidLoad方法中初始化数组

     _property = @[@"红",@"蓝",@"黑"];
_location = @[@"上",@"下",@"左",@"右"];

设置有多少组

 // 设置组section
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return ; // 返回组数
}

3、设置每组多少行

 // 设置每组多少行 row
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(section == )
return _property.count;
if (section == ) {
return _location.count;
} return ;
}

4、设置第section组第row行的数据

 // 设置行内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 创建UITableViewCell对象
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
if (indexPath.section == )
{
cell.textLabel.text = _property[indexPath.row];
}
if (indexPath.section == )
{
cell.textLabel.text = _location[indexPath.row];
} return cell; // 返回
}

5、设置每组头部显示的文字

 // 设置每组头部显示文字
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
if(section == )
{
return @"颜色";
}
if (section == )
{
return @"位置";
}
return nil;
}

6、设置每组尾部显示的文字

 // 设置每组尾部显示文字
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
if(section == )
{
return @"设置一些颜色属性啦啦啦啦";
}
if (section == )
{
return @"位置属性的设置哈哈哈哈";
}
return nil;
}

运行可以看到结果:

7、代码优化

上面的代码看着可扩展性太差,下面来几个优化版本,直接看代码吧

 //
// SLQViewController.m
// UITableView的练习
//
// Created by Christian on 15/5/16.
// Copyright (c) 2015年 slq. All rights reserved.
// #import "SLQViewController.h" //
#define kHeader @"header"
#define kFooter @"footer"
#define kSetting @"setting" @interface SLQViewController () <UITableViewDataSource> // 遵守协议 {
// NSArray *_property;
// NSArray *_location; // 优化1
// NSArray *_allSetting;
// NSArray *_noramlSet;
// NSArray *_moveSet; // 优化2
NSArray *_allInfo; // 内部保存字典
}
@end @implementation SLQViewController - (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 创建一个UITableView
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
tableView.dataSource = self; // 设置数据源
[self.view addSubview:tableView]; // 添加到视图
//
// _property = @[@"颜色",@"大小",@"透明度"];
// _location = @[@"上",@"下",@"左",@"右"];
// 优化1
// _allSetting = @[
// @[@"颜色",@"大小",@"透明度"],
// @[@"上",@"下",@"左",@"右"],
// ];
// _noramlSet = @[@"设置",@"位置"];
// _moveSet = @[@"常见属性设置啦啦啦啦啦了",@"位移属性设置啊啊啊啊啊啊啊啊"];
// 优化2,保存字典
_allInfo = @[
@{
kHeader : @"颜色",
kFooter : @"颜色属性啦啦啦啦啦啦啦啦啦",
kSetting : @[@"红",@"蓝",@"黑"]
},
@{
kHeader : @"位置",
kFooter : @"位置属性啊啊啊啊啊啊啊啊",
kSetting : @[@"上",@"下",@"左",@"右"]
},
@{
kHeader : @"透明属性",
kFooter : @"透明属性啊啊啊啊啊啊啊啊",
kSetting : @[@"透明",@"半透明",@"不透明"]
}
]; }
// 设置组section
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
//return 2;
// 优化1
//return _allSetting.count;
// 优化2
return _allInfo.count;
}
// 设置每组多少行 row
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// if(section == 0)
// return _property.count;
// if (section == 1) {
// return _location.count;
// }
// 优化1
// return [_allSetting[section] count];
// 优化2
return [_allInfo[section][kSetting] count];
//return 0;
}
// 设置行内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
// if (indexPath.section == 0)
// {
// cell.textLabel.text = _property[indexPath.row];
// }
// if (indexPath.section == 1)
// {
// cell.textLabel.text = _location[indexPath.row];
// }
// 优化1
//cell.textLabel.text = _allSetting[indexPath.section][indexPath.row];
// 优化2
cell.textLabel.text = _allInfo[indexPath.section][kSetting][indexPath.row];
return cell;
}
// 设置每组头部显示文字
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
// if(section == 0)
// {
// return @"设置";
// }
// if (section == 1)
// {
// return @"位置";
// }
// 优化1
// return _noramlSet[section];
// 优化2
return _allInfo[section][kHeader];
}
// 设置每组尾部显示文字
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{
// if(section == 0)
// {
// return @"设置一些常见属性";
// }
// if (section == 1)
// {
// return @"位置属性的设置";
// }
// 优化1
// return _moveSet[section];
// 优化2
return _allInfo[section][kFooter];
}
@end

源代码:

  http://pan.baidu.com/s/1hqCLqra

其实还有优化的空间,继续学习。。。。

IOS开发学习笔记026-UITableView的使用的更多相关文章

  1. iOS开发学习笔记:基础篇

    iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...

  2. ios开发学习笔记(1)

    objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...

  3. iOS开发学习笔记

    1 常用的第三方工具 1.1 iPhone Simulator 测试程序需要模拟器iPhone Simulator 1.2 设计界面需要Interface Builder,Interface Buil ...

  4. ios开发学习笔记(这里一定有你想要的东西,全部免费)

    1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...

  5. IOS开发学习笔记017-第一个IOS应用

    第一个IOS应用程序,就从最简单的开始吧. 1.先了解一下开发环境,Xcode的相关组成 2.还有模拟器 3.运行与停止按钮 4.新建一个工程 5.看看main函数里都有啥 6.现在来添加一个控件 1 ...

  6. (ios开发学习笔记一)ios项目文件结构

    转自:http://www.cnblogs.com/macroxu-1982/archive/2012/07/31/2616389.html 下面是单个窗体项目例子,我们从这个项目开始,说明ios项目 ...

  7. IOS开发学习笔记043-QQ聊天界面实现

    QQ聊天界面实现 效果如下: 实现过程: 1.首先实现基本界面 头像使用 UIImageView : 文字消息使用 UIButton 标签使用 UILable :水平居中 所有元素在一个cell中,在 ...

  8. IOS开发学习笔记042-UITableView总结2

    一.自定义非等高的cell         如常见的微博界面,有的微博只有文字,有的有文字和图片.这些微博的高度不固定需要重新计算. 这里简单说一下几种方法.前面的步骤和设置等高的cell一样.现在来 ...

  9. IOS开发学习笔记041-UITableView总结1

    一.UITableView的常用属性 1.分割线 // 分割线 self.tableView.separatorColor = [UIColorredColor]; // 隐藏分割线 self.tab ...

随机推荐

  1. Python学习-用户输入和字符串拼接

      用户输入和字符串拼接 #用户输入和字符串拼接username=input("username:")age=int(input("Age:")) #转换整数型 ...

  2. node18 服务器上 pytorch cyclegan 测试有问题,numpy 版本不对

    提示如下错误: module compiled against API version 0xb but this version of numpy is 0xa 尝试的方法: pip install ...

  3. 为什么表单中post接受数据是获取name值而不是id值

    感谢解惑者:http://blog.csdn.net/u013451157/article/details/78503831 表单(form)的控件名,提交的数据都用控件的name而不是id来控制.  ...

  4. linux 命令——10 cat (转)

    cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1.命令格式: cat [选项] [文件] ...

  5. windows phone 8.0 的网络图片异步加载方案

    买了一本林政的8.1UI的书,看到一个使用弱引用对像来解决图片缓存的问题,刚好自已写的应用也遇到这个问题,于是小改动了一下代码,搬到了8.0版本来使用,代码由 zhxilin℃+ 大神提供了部分解决代 ...

  6. 启动Jmeter时遇到的几种错误

    1.权限不够 解决办法:用管理员权限运行 2.sdk版本太低 解决办法:1)查看当前sdk版本:java -version 2)安装sdk1.7或以上版本(jmeter3.0版本要用sdk1.7及以上 ...

  7. java设计模式——建造者模式

    一. 定义与类型 定义:将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 用户只需制定需要建造的类型就可以得到它们,建造过程以及细节不需要知道 类型:创建型 建造者模式与工厂模 ...

  8. Redis学习记录(二)

    1.Key命令 设置key的过期时间. expire key second:设置key的过期时间 ttl key:查看key的有效期(如果显示正数说明该key正在倒计时,如果是-1说明该key永久保存 ...

  9. 分词,复旦nlp,NLPIR汉语分词系统

    http://www.nlpir.org/ http://blog.csdn.net/zhyh1986/article/details/9167593

  10. C# StreamWriter对像

    用FileWriter来随机读取文件是个好主意,而用StreamWriter可以直接把字符串写入文件中,它处理重要的转换和向FileStream对像写入工作.创建StreamWriter有很多方法: ...