当前位置: 首页 > 编程日记 > 正文

IOS UITableView详解一数据展示 页面简单实现

为什么80%的码农都做不了架构师?>>>   hot3.png

一 UITableView简介

UITableView用于表格数据展示,是使用频率最高的控件。UITableView继承自UIScrollView,具有UIScrollView的所有特性。



二 UITableView的两种样式

2.1 UITableViewStylePlain                                   2.2 UITableViewStyleGrouped

230042_XGFz_1032974.png                     230242_81nC_1032974.png




UITableView数据展示

UITableView需要数据源(dataSource)来显示数据,实现UITableViewDataSource协议的对象,都可以是UITableView的数据源。通过协议中的方法,UITableView显示相应的行数以及每行显示的数据。


3.1 调用数据源的以下方法获取一共有多少组数据
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;


3.2 调用数据源的以下方法获取每一组有多少行数据
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;


3.3 调用数据源的以下方法获取每一行显示什么内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;




UITableViewCell

UITableView每行都是一个UITableViewCell,通过dataSource的tableView:cellForRowAtIndexPath:方法来初始化每行


UITableViewCell内部有个默认的子视图:contentView,contentView是UITableViewCell所显示内容的父视图,可以通过设置UITableViewCell的accessoryType来显示一些辅助指示视图,辅助指示视图用于表示动作的图标。

4.1 辅助指示视图
UITableViewCell的accessoryType值图标样式
UITableViewCellAccessoryNone(默认)不显示辅助指示视图
UITableViewCellAccessoryDisclosureIndicator185130_pzIH_1032974.png
UITableViewCellAccessoryDetailDisclosureButton224335_XCrF_1032974.png
UITableViewCellAccessoryCheckmark185130_ywMQ_1032974.png
UITableViewCellAccessoryDetailButton224257_cDxI_1032974.png

注:还可以通过UITableViewCell的accessoryView属性来自定义辅助指示视图



4.2 contentView 的子视图
//4.2.1 textLabel
@property (nonatomic, readonly, retain) UILabel *textLabel;//4.2.2 detailTextLabel
@property (nonatomic, readonly, retain) UILabel *detailTextLabel;//4.2.3 imageView
@property (nonatomic, readonly, retain) UIImageView *imageView;



4.3 UITableViewCell的UITableViewCellStyle属性

UITableViewCellStyle用于决定使用contentView的哪些子视图,以及这些子视图在contentView中的位置

 

UITableViewCellStyle的值子视图样式
UITableViewCellStyleDefault191347_PlHu_1032974.png
UITableViewCellStyleSubtitle191347_vAAu_1032974.png
UITableViewCellStyleValue1191347_2nbd_1032974.png
UITableViewCellStyleValue2191346_Sw2K_1032974.png




五 界面简单实现

提供car类,创建car类的数组,用于展示.

5.1 代码
--car类
@interface GMCar : NSObject
@property (nonatomic, copy) NSString   *title;
@property (nonatomic, copy) NSString   *desc;
@property (nonatomic, strong) NSArray *subCars;
@end


#import "ViewController.h"
#import "GMCar.h"
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSArray *array;
@end@implementation ViewController- (void)viewDidLoad {//1.UITableView 设置//1.1 设置数据代理self.tableView.dataSource = self;//1.2 设置frameself.tableView.frame = self.view.frame;//1.3 设置代理self.tableView.delegate = self;//2.UITableView加入veiw[self.view addSubview:self.tableView];
}#pragma mark - 数据加载
/***  调用数据源以下方法获取一共有多少组数据**  @param tableView <#tableView description#>**  @return <#return value description#>*/
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{return self.array.count;
}/***  调用数据源方法获取每一组有多少行数据**  @param tableView <#tableView description#>*  @param section   <#section description#>**  @return <#return value description#>*/
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{GMCar *car = self.array[section];return car.subCars.count;
}/***  调用数据源方法获取每一行显示什么内容**  @param tableView <#tableView description#>*  @param indexPath <#indexPath description#>**  @return <#return value description#>*/
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{//1.创建cellUITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];//1.1 设置accessoryType//    UITableViewCellAccessoryNone,                   // don't show any accessory view//    UITableViewCellAccessoryDisclosureIndicator,    // regular chevron. doesn't track//    UITableViewCellAccessoryDetailDisclosureButton, // info button w/ chevron. tracks//    UITableViewCellAccessoryCheckmark,              // checkmark. doesn't track//    UITableViewCellAccessoryDetailButton NS_ENUM_AVAILABLE_IOS(7_0) // info button. trackscell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;//2.取出数据GMCar *car = self.array[indexPath.section];NSString *name =car.subCars[indexPath.row];//3.设置数据cell.textLabel.text =name;return cell;
}/***  section组显示标题**  @param tableView <#tableView description#>*  @param section   <#section description#>**  @return <#return value description#>*/
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{GMCar *car = self.array[section];return car.title;
}/***  section组显示描述**  @param tableView <#tableView description#>*  @param section   <#section description#>**  @return <#return value description#>*/
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
{GMCar *car = self.array[section];return car.desc;
}#pragma mark - UITableViewDelegate
/***  table 每一行的高度**  @param tableView <#tableView description#>*  @param indexPath <#indexPath description#>**  @return <#return value description#>*/
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{return 20.0;
}/***  section组Header的高度**  @param tableView <#tableView description#>*  @param section   <#section description#>**  @return <#return value description#>*/
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{NSLog(@"height");return 30.0;
}/***  section组Footer的高度**  @param tableView <#tableView description#>*  @param section   <#section description#>**  @return <#return value description#>*/
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{return 30.0;
}#pragma mark - 懒加载
-(UITableView *)tableView
{if (!_tableView) {//UITableViewStyleGrouped样式_tableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStyleGrouped];//UITableViewStylePlain 样式//_tableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];}return _tableView;
}-(NSArray *)array
{if (!_array) {_array = [[NSArray alloc]init];GMCar *c1 = [[GMCar alloc] init];c1.title = @"德国品牌";c1.desc = @"世界一流品牌";c1.subCars = @[@"奥迪" , @"宝马"];GMCar *c2 = [[GMCar alloc] init];c2.title = @"日本品牌";c2.desc = @"实用价值高";c2.subCars = @[@"丰田" , @"本田"];GMCar *c3 = [[GMCar alloc] init];c3.title = @"欧美品牌";c3.desc = @"高逼格";c3.subCars = @[@"劳斯莱斯" , @"布加迪", @"兰博基尼"];_array = @[c1, c3, c2];}return _array;
}#pragma mark - 隐藏状态栏
- (BOOL)prefersStatusBarHidden
{return YES;
}
@end


5.2 展示

UITableViewStylePlain 样式                      UITableViewStyleGrouped 样式

225334_wjb1_1032974.png       225334_qmD1_1032974.png


UITableViewCell的accessoryType值为UITableViewCellAccessoryDetailDisclosureButton

225706_uZhL_1032974.png


转载于:https://my.oschina.net/wolx/blog/366709

相关文章:

Bulk_Collect_Performance 比较

上一篇讲到了调用集锦&#xff0c;这篇关注一下性能问题吧。 DECLARECURSOR c_tool_listISSELECT descr d1 FROM hardware;l_descr hardware.descr%type; BEGINOPEN c_tool_list;LOOPFETCH c_tool_list INTO l_descr;EXITWHEN c_tool_list%notfound;END LOOP;CLOSE c_tool_list…

Unity初学Shadergraph创建着色器学习教程

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:51节课(4h 44m) |大小解压后:2.55 GB 使用Unity Shadergraph创建游戏资产指南 初学者的Unity Sha…

Linux命令学习总结:hexdump

命令简介&#xff1a; hexdump是Linux下的一个二进制文件查看工具&#xff0c;它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看。 指令所在路径&#xff1a;/usr/bin/hexdump 命令语法&#xff1a; hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n leng…

Java学习总结:49(字符缓冲流:BufferedReader)

字符缓冲流&#xff1a;BufferedReader 在开始前先让我们来看一段代码 package Project.Study.IOSystem;import java.io.InputStream;public class Test4 {public static void main(String[]args)throws Exception{InputStream inputStreamSystem.in;StringBuffer bufnew Str…

2022-2028年中国干洗行业市场全景调研与投资前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国干洗行业市场行业相关概述、中国干洗行业市场行业运行环境、分析了中国干洗行业市场行业的…

成为优秀高级程序员的10个要点(转)

英文原文&#xff1a;10 Steps to become a Senior Software Engineer What 软件工程师的职业生涯要历经以下几个阶段&#xff1a;初级、中级&#xff0c;最后才是高级。这篇文章主要是讲如何通过 10 个步骤助你成为一名高级软件工程师。 Why 得到更多的报酬&#xff01;因为你…

count http://www.cplusplus.com/reference/algorithm/count/

// count algorithm example#include <iostream>#include <algorithm>#include <vector>using namespace std;//count 他查找一个元素出现的次数int main () {int mycount;// counting elements in array: int myints[] {10,20,30,30,20,10,10,20}; // 8…

Clip Studio Paint 高级着色学习教程

剪辑工作室颜料着色专业指南&#xff01; A Pro’s Guide to Coloring With Clip Studio Paint! MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:2.78 GB |时…

Java学习总结:50(扫描流:Scanner)

扫描流&#xff1a;Scanner Scanner类定义在java.util包中&#xff0c;所以此类是一个工具类&#xff0c;利用它可以方便地实现数据的输入操作。 Scanner实现了Iterator(迭代)接口与Closeable接口。 Scanner类中定义的常用方法如下&#xff1a; No.方法类型描述1public Scann…

圣杯和双飞翼布局

//圣杯布局-wrap设置padding/left right加相对定位 <!DOCTYPE html> <html lang"zh-CN"> <html> <meta charset"utf-8"> <meta http-equiv"X-UA-Compatible" content"IEedge,chrome1"/> <title>&…

2022-2028年中国干电池制造行业产销需求与投资预测分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国干电池制造行业市场行业相关概述、中国干电池制造行业市场行业运行环境、分析了中国干电池…

JQuery中的事件以及动画

嘿嘿&#xff0c;今天学习了JQuery的事件以及动画&#xff0c;感觉即将学习完JQuery&#xff0c;在回忆起上周学习的JavaScript&#xff0c;感觉好多刚刚学习的知识点都记得模 糊啦&#xff0c;这个是很让失望的&#xff0c;这里只说明了一点&#xff0c;课是听过啦&#xff0c…

Go 系列教程 —— 20. 并发入门

欢迎来到我们 Golang 系列教程的第 20 篇。 Go 是并发式语言&#xff0c;而不是并行式语言。在讨论 Go 如何处理并发之前&#xff0c;我们必须理解何为并发&#xff0c;以及并发与并行的区别。 并发是什么&#xff1f; 并发是指立即处理多个任务的能力。一个例子就能很好地说明…

Unity创造没有代码的游戏学习教程

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;48.0 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小:17.4 GB |时长:17h 18m 你会学到什么 如何制作游戏 如何在Unity中制作无代码的游戏 如何使用Bolt 在…

Java学习总结:51(对象序列化)

对象序列化 对象序列化的本质实际上就是将内存中所保存的对象数据转换为二进制数据流进行传输的操作。 但并不是所有类的对象都可以直接进行序列化操作&#xff0c;要被序列化的对象所在的类一定要实现java.io.Serializable接口。而且序列化接口里面是没有任何操作方法存在的&…

(九)单片机串行口 内部结构的讲解 01

1、 基本概念 常用于数据通信的传输方式有单工、半双工、全双工和多工方式。 单工方式&#xff1a;数据仅按一个固定方向传送。因而这种传输方式的用途有限&#xff0c;常用于串行口的打印数据传输与简单系统间的数据采集。 半双工方式&#xff1a;数据可实现双向传送&am…

2022-2028年中国改性尼龙行业市场全景评估及产业前景规划报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国改性尼龙行业市场行业相关概述、中国改性尼龙行业市场行业运行环境、分析了中国改性尼龙行…

[原创]Java性能优化权威指南读书思维导图

[原创]Java性能优化权威指南读书思维导图 书名&#xff1a;Java性能优化权威指南 原书名&#xff1a;Java performance 作者&#xff1a; (美)Charlie Hunt Binu John 译者&#xff1a; 柳飞 陆明刚 京东购书地址&#xff1a; http://item.jd.com/11407830.html 介绍&…

【Java】lambda表达式与函数式接口的完美配合

透过现象看本质:它们真正需要的,是一个"函数",是一个告诉它们,根据什么去排序、被触发后执行什么、线程去执行什么任务的"函数"(compare、actionPerformed、run)。在没有计算机的数学时代,逻辑学家Church意识到他需要将一个函数符号化,他使用了希腊字母λ——λ的发音即为lambda。这无疑大大简化了代码,在某些情况下提升了效率——更重要的是,这是大势所趋的"函数式编程"思想的又一次胜利。实际上,lambda表达式的作用域,不是大括号,而是大括号的外围——和。

spring2

bean的scope"singleton":单例(默认)"prototype":一个bean可以对应多个对象实例 获取bean的方法1、ApplicationContext(首选)(1)bean的scope为singleton,实例化ApplicationContext时,bean对象也随之实例化(2)bean的scope为prototype,实例化ApplicationConte…

多线程Volatile关键字

一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。​ 强制将对缓存的修改操作(即写操作)立即写入主存;如果是写操作导致其他线程中对应的缓存无效,让其他线程只能从主存中拿刚刚更新的。2)禁止指令重排序。3)volatile只能保证【可见性】、【有序性】,并不能保证【原子性。

游戏设计行业标准测试:秘密收集

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:30节课(4h 5m) |大小解压后:2.68 GB Industry Standard Game Design Tests: The Secret Collectio…

Java学习总结:52(Java网络编程)

Java网络编程 开发第一个网络程序 java.net包提供了网络编程有关的开发工具类&#xff0c;在此包中有一下两个主要的核心操作类。 ServerSocket类&#xff1a;是一个封装支持的TCP协议的操作类&#xff0c;主要工作在服务器端&#xff0c;用于接收客户端请求&#xff1b;Soc…

聊聊高并发(十六)实现一个简单的可重入锁

可重入锁指的是假设一个线程已经获得了一个锁&#xff0c;那么它能够多次进入这个锁&#xff0c;当然前提是线程须要先获得这个锁。 可重入锁是最常使用的锁。Java的内置锁就是可重入锁&#xff0c;使用synchronizedkeyword能够启用内置锁机制&#xff0c;比方说一个类有两个sy…

2022-2028年中国蛋制品行业市场专项调查及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国蛋制品行业市场行业相关概述、中国蛋制品行业市场行业运行环境、分析了中国蛋制品行业市场…

Twisted入门教程(3)

第三部分&#xff1a;开始认识Twisted可以从这里从头开始阅读这个系列。用twisted的方式实现前面的内容最终我们将使用twisted的方式来重新实现我们前面的异步模式客户端。不过&#xff0c;首先我们先稍微写点简单的twisted程序来认识一下twisted。最最简单的twisted程序就是下…

openstack高可用方案

openstack高可用方案 HA 将服务分为两类&#xff1a; • 有状态服务&#xff1a;后续对服务的请求依赖于之前对服务的请求。OpenStack中有状态的服务包括MySQL数据库和AMQP消息队列。对于有状态类服务的HA&#xff0c;如neutron-l3-agent、neutron-metadata-agent、nova-comput…

3D游戏设计和创作工具学习教程 3D Game Design Creation Tools

语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; 大小解压后&#xff1a;1.94G 1280X720 mp4 三维游戏设计和创作工具 用扎实的工作流程开始开发游戏 课程获取&#xff1a;3D游戏设计和创作工具学习教程 3D Game Design & Creation Too…

Java学习总结:53(单对象保存父接口:Collection)

单对象保存父接口&#xff1a;Collection java.util.Collection是进行单对象保存的最大父接口&#xff0c;即每次利用Collection接口都只能保存一个对象信息。单对象保存父接口定义如下&#xff1a; public interface Collection<E> extends Iterable<E>由该定义…

ORA-00942:表或视图不存在(低级错误)

在好多时候。调试PL/SQL对象时会报。ORA-00942 看看错误原因吧&#xff1a; 报错原因&#xff1a;1.该schema没有对表或者视图没有select权限 2.就是该对象不存在 解决的方法&#xff1a; 1.授权给对应对象 2.create table or view 转载于:https://www.cnblogs.com/blfshiye/p/…