博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS开发学习笔记026-UITableView的使用
阅读量:5322 次
发布时间:2019-06-14

本文共 7286 字,大约阅读时间需要 24 分钟。

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

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

 

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

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

2、设置组

将待添加数据到数组中

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

 

在viewDidLoad方法中初始化数组

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

 

设置有多少组

1 // 设置组section2 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView3 {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 () 
// 遵守协议 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 // 优化1110 //cell.textLabel.text = _allSetting[indexPath.section][indexPath.row];111 // 优化2112 cell.textLabel.text = _allInfo[indexPath.section][kSetting][indexPath.row];113 return cell;114 }115 // 设置每组头部显示文字116 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section117 {118 // if(section == 0)119 // {120 // return @"设置";121 // }122 // if (section == 1)123 // {124 // return @"位置";125 // }126 // 优化1127 // return _noramlSet[section];128 // 优化2129 return _allInfo[section][kHeader];130 }131 // 设置每组尾部显示文字132 - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section133 {134 // if(section == 0)135 // {136 // return @"设置一些常见属性";137 // }138 // if (section == 1)139 // {140 // return @"位置属性的设置";141 // }142 // 优化1143 // return _moveSet[section];144 // 优化2145 return _allInfo[section][kFooter];146 }147 @end

 

 源代码:

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

 

转载于:https://www.cnblogs.com/songliquan/p/4507454.html

你可能感兴趣的文章
安卓当中的线程和每秒刷一次
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
标识符
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
内存地址对齐
查看>>
创新课程管理系统数据库设计心得
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
php中的isset和empty的用法区别
查看>>
把word文档中的所有图片导出
查看>>
ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
查看>>
Leetcode 589. N-ary Tree Preorder Traversal
查看>>
正则表达式
查看>>