IOS开发学习笔记026-UITableView的使用

UITableView的简单使用过程

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

2、设置多少组

3、设置每组多少行

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

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

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

7、代码优化

简单介绍:

  两种样式

    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对象,并设置数据源

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

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

1 @interface SLQViewController () <UITableViewDataSource> // 遵守协议
2
3 @end

2、设置组

将待添加数据到数组中

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

在viewDidLoad方法中初始化数组

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

设置有多少组

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

3、设置每组多少行

 1 // 设置每组多少行 row
 2 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 3 {
 4     if(section == 0)
 5         return _property.count;
 6     if (section == 1) {
 7         return _location.count;
 8     }
 9
10     return 0;
11 }

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

 1 // 设置行内容
 2 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 3 {     // 创建UITableViewCell对象
 4     UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
 5     if (indexPath.section == 0)
 6     {
 7         cell.textLabel.text = _property[indexPath.row];
 8     }
 9     if (indexPath.section == 1)
10     {
11         cell.textLabel.text = _location[indexPath.row];
12    }
13
14     return cell; // 返回
15 }

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

 1 // 设置每组头部显示文字
 2 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
 3 {
 4     if(section == 0)
 5     {
 6         return @"颜色";
 7     }
 8     if (section == 1)
 9     {
10         return @"位置";
11     }
12     return nil;
13 }


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

 1 // 设置每组尾部显示文字
 2 - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
 3 {
 4     if(section == 0)
 5     {
 6         return @"设置一些颜色属性啦啦啦啦";
 7     }
 8     if (section == 1)
 9     {
10         return @"位置属性的设置哈哈哈哈";
11     }
12     return nil;
13 }

运行可以看到结果:

7、代码优化

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

  1 //
  2 //  SLQViewController.m
  3 //  UITableView的练习
  4 //
  5 //  Created by Christian on 15/5/16.
  6 //  Copyright (c) 2015年 slq. All rights reserved.
  7 //
  8
  9 #import "SLQViewController.h"
 10
 11
 12 //
 13 #define kHeader @"header"
 14 #define kFooter @"footer"
 15 #define kSetting @"setting"
 16
 17
 18 @interface SLQViewController () <UITableViewDataSource> // 遵守协议
 19
 20 {
 21 //    NSArray *_property;
 22 //    NSArray *_location;
 23
 24     // 优化1
 25 //    NSArray *_allSetting;
 26 //    NSArray *_noramlSet;
 27 //    NSArray *_moveSet;
 28
 29     // 优化2
 30     NSArray *_allInfo; // 内部保存字典
 31 }
 32 @end
 33
 34 @implementation SLQViewController
 35
 36 - (void)viewDidLoad
 37 {
 38     [super viewDidLoad];
 39     // Do any additional setup after loading the view, typically from a nib.
 40     // 创建一个UITableView
 41     UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
 42     tableView.dataSource = self; // 设置数据源
 43     [self.view addSubview:tableView]; // 添加到视图
 44 //
 45 //    _property = @[@"颜色",@"大小",@"透明度"];
 46 //    _location = @[@"上",@"下",@"左",@"右"];
 47     // 优化1
 48 //    _allSetting = @[
 49 //                    @[@"颜色",@"大小",@"透明度"],
 50 //                    @[@"上",@"下",@"左",@"右"],
 51 //                    ];
 52 //    _noramlSet =  @[@"设置",@"位置"];
 53 //    _moveSet =  @[@"常见属性设置啦啦啦啦啦了",@"位移属性设置啊啊啊啊啊啊啊啊"];
 54     // 优化2,保存字典
 55     _allInfo = @[
 56                     @{
 57                         kHeader : @"颜色",
 58                         kFooter : @"颜色属性啦啦啦啦啦啦啦啦啦",
 59                         kSetting : @[@"红",@"蓝",@"黑"]
 60                         },
 61                     @{
 62                         kHeader : @"位置",
 63                         kFooter : @"位置属性啊啊啊啊啊啊啊啊",
 64                         kSetting : @[@"上",@"下",@"左",@"右"]
 65                         },
 66                     @{
 67                         kHeader : @"透明属性",
 68                         kFooter : @"透明属性啊啊啊啊啊啊啊啊",
 69                         kSetting : @[@"透明",@"半透明",@"不透明"]
 70                         }
 71                     ];
 72
 73 }
 74 // 设置组section
 75 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 76 {
 77     //return 2;
 78     // 优化1
 79     //return _allSetting.count;
 80     // 优化2
 81     return _allInfo.count;
 82 }
 83 // 设置每组多少行 row
 84 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 85 {
 86 //    if(section == 0)
 87 //        return _property.count;
 88 //    if (section == 1) {
 89 //        return _location.count;
 90 //    }
 91     // 优化1
 92     // return [_allSetting[section] count];
 93     // 优化2
 94     return [_allInfo[section][kSetting] count];
 95     //return 0;
 96 }
 97 // 设置行内容
 98 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 99 {
100     UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
101 //    if (indexPath.section == 0)
102 //    {
103 //        cell.textLabel.text = _property[indexPath.row];
104 //    }
105 //    if (indexPath.section == 1)
106 //    {
107 //        cell.textLabel.text = _location[indexPath.row];
108 //    }
109     // 优化1
110     //cell.textLabel.text = _allSetting[indexPath.section][indexPath.row];
111     // 优化2
112     cell.textLabel.text = _allInfo[indexPath.section][kSetting][indexPath.row];
113     return cell;
114 }
115 // 设置每组头部显示文字
116 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
117 {
118 //    if(section == 0)
119 //    {
120 //        return @"设置";
121 //    }
122 //    if (section == 1)
123 //    {
124 //        return @"位置";
125 //    }
126     // 优化1
127     // return _noramlSet[section];
128     // 优化2
129     return _allInfo[section][kHeader];
130 }
131 // 设置每组尾部显示文字
132 - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
133 {
134 //    if(section == 0)
135 //    {
136 //        return @"设置一些常见属性";
137 //    }
138 //    if (section == 1)
139 //    {
140 //        return @"位置属性的设置";
141 //    }
142      // 优化1
143     // return _moveSet[section];
144      // 优化2
145     return _allInfo[section][kFooter];
146 }
147 @end

源代码:

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

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

时间: 2024-11-12 03:32:05

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

IOS开发学习笔记-(2)键盘控制,键盘类型设置,alert 对话框

一.关闭键盘,放弃第一响应者,处理思路有两种 ① 使用文本框的 Did End on Exit 绑定事件 ② UIControl on Touch 事件 都去操作 sender 的  resignFirstResponder #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *txtUserName; @pro

iOS开发学习笔记:基础篇

iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境),Xcode是一个集成开发环境,包括了编辑器.调试.模拟器等等一系列方便开发和部署的工具,iOS SDK则是开发应用所必需,不同的SDK分别对应不同的iOS版本或设备,通常我们需要下载多个iOS SDK以确保我们开发的程序能够在不同版本的iOS上正常运行. 创建新工程 Xcode提供了很多种工程模

IOS开发学习笔记-(3) 进度条、等待动画开始停止

一.创建对应空间视图  ,如下图: 二.编写对应的 .h 代码,如下 : #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activWaitNetWork; @property (weak, nonatomic) IBOutlet UIProgressView *pgrsDownLo

IOS开发学习笔记(二)-语音识别(科大讯飞)

上次简单地讲解了如何利用科大讯飞完成语音合成,今天接着也把语音识别整理一下.当然,写代码前我们需要做的一些工作(如申请appid.导库),在上一篇语音合成的文章当中已经说过了,不了解的可以看看我上次的博文,那么这次直接从堆代码开始吧. 详细步骤: 1.导完类库之后,在工程里添加好用的头文件.在视图里只用了一个UITextField显示识别的内容,两个UIButton(一个开始监听语音,一个结束监听),然后引入类.添加代理,和语音合成的一样. MainViewController.h 1 #imp

IOS开发学习笔记(1)-----UILabel 详解

1. [代码][C/C++]代码     //创建uilabelUILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 280, 80)];//设置背景色label1.backgroundColor = [UIColor grayColor];//设置taglabel1.tag = 91;//设置标签文本label1.text = @"Hello world!";//设置标签文本字体和字体大小label1.

IOS开发学习笔记(2)-----UIButton 详解

1. [代码][C/C++]代码     //这里创建一个圆角矩形的按钮    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];    //    能够定义的button类型有以下6种,//    typedef enum {//        UIButtonTypeCustom = 0,          自定义风格//        UIButtonTypeRoundedRect,        

IOS开发学习笔记--语音合成(科大讯飞)

      现在语音服务越来越热,我们平时使用的很多软件都带有语音合成和识别功能,用起来也很方便.说到语音服务,Google和微软都提供过API接口,不过笔者要介绍的是国内的智能语音技术提供商---科大讯飞.之前看过一个比较Google.微软和科大讯飞语音识别引擎的博文(http://fqctyj.blog.163.com/blog/static/70843455201361955322797/),有兴趣可以去看看.笔者接触语音服务的时间也不长,对语音服务也不是很了解,但是拆解过科大讯飞的Dem

IOS开发学习笔记017-什么是IOS开发

应用程序开发流程 1.IOS开发需要思考的问题 用户是谁?不同应用程序的内容和用户体验大不相同,这取决于想要编写的是什么应用程序,它可能是儿童游戏,也可能是待办事项列表应用程序,又或者是测试自己学习成果的应用程序. 应用程序的用途是什么?赋予应用程序一个明确的用途十分重要.了解激发用户使用应用程序的动因是界定用途的一个出发点. 应用程序尝试解决什么问题?应用程序应该完美解决单个问题,而不是尝试解决多个截然不同的问题.如果发现应用程序尝试解决不相关的问题,那么最好考虑编写多个应用程序. 应用程序要

ios开发学习笔记(1)

objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = [UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];//1.从Infor.plist中取出版本号NString *version = [NSBundle mainBundle].infoDictionary[key];//2.

iOS开发学习笔记二:UITableView

一:TableViewController 1:删掉默认的ViewController 拖动一个TableViewController 2:新建一个Cocoa Touch Class,命名为:TableViewController 3:将1邦定至2 4:拖动一个Label,TAG设为1,将CELL的ID设为cell 相关代码: 1 override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 2 3 retu