文档章节

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

卧龙小
 卧龙小
发布于 2015/01/12 23:06
字数 1037
阅读 269
收藏 1

一 UITableView简介

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



二 UITableView的两种样式

2.1 UITableViewStylePlain                                   2.2 UITableViewStyleGrouped

                      




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(默认) 不显示辅助指示视图
UITableViewCellAccessoryDisclosureIndicator
UITableViewCellAccessoryDetailDisclosureButton
UITableViewCellAccessoryCheckmark
UITableViewCellAccessoryDetailButton

注:还可以通过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的值 子视图样式
UITableViewCellStyleDefault
UITableViewCellStyleSubtitle
UITableViewCellStyleValue1
UITableViewCellStyleValue2




五 界面简单实现

提供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 设置frame
    self.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.创建cell
    UITableViewCell *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. tracks
    cell.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 样式                  

          


UITableViewCell的accessoryType值为UITableViewCellAccessoryDetailDisclosureButton

   


© 著作权归作者所有

卧龙小
粉丝 42
博文 146
码字总数 70107
作品 0
西城
程序员
私信 提问
iOS开发tips-神奇的UITableView

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianxin160/article/details/71436920 概述 UITableView是iOS开发中使用频率最高的UI控件,在前面的文章中对于...

KenshinCui
2017/05/08
0
0
iOS开发tips-UITableView、UICollectionView行高/尺寸自适应

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianxin160/article/details/55002487 UITableView 我们都知道UITableView从iOS 8开始实现行高的自适应相对比...

KenshinCui
2017/02/12
0
0
iOS开发系列--UITableView全面解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianxin160/article/details/47753205 --UIKit之UITableView 概述 在iOS开发中UITableView可以说是使用最广泛...

KenshinCui
2015/08/18
0
0
iOS之UITableView重新排序

表格视图在ios 开发中,经常使用到的视图,几乎每个app 中多多少少都会有UITableView的影子,就是因为UITableView的功能非常强大,使用起来也非常简单,苹果公司也对接口做了很好的封装,才使...

广州英趣科技
2013/06/05
2.5K
2
UI_09 UITableView(表视图)

⼀、表视图 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView。UITableView继承自UIScrollView,因此支持垂直滚动,而且性能极佳 1、表示图的样式 UITableViewStylePlain UITa...

黑伞将军
2015/08/26
67
0

没有更多内容

加载失败,请刷新页面

加载更多

sync.Mutex 互斥锁

说明: 互斥锁用来保证在任一时刻,只能有一个例程访问某对象。Mutex 的初始值为解锁状态。Mutex 通常作为其它结构体的匿名字段使用,使该结构体具有 Lock 和 Unlock 方法。Mutex 可...

李琼涛
14分钟前
5
0
自建redis笔记

自建redis笔记 最近在linux安装了一下redis,特做一些笔记! 本文先单节点启动redis,然后再进行持久化配置,在次基础上,再分享搭建主从模式的配置以及Sentinel 哨兵模式及集群的搭建 单节点...

北极之北
17分钟前
3
0
扛住阿里双十一高并发流量,Sentinel是怎么做到的?

Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景 本文介绍阿里开源限流熔断方案Sentinel功能、原理、架构、快速入门以及相关框架比较 基本介绍 1 名词解释 服务限流 :当系统资源...

分布式系统架构
19分钟前
4
0
事假杨晨龙(Z16021)月薪请假单

svn co URL --username xxx-- password yyy ./

桃花飞舞
42分钟前
4
0
当Activity关闭后,网络请求回调的处理

当我们在使用网络请求的时候,一般都是通过回调来获取请求到的数据。对于网络请求的回调需要注意的几个点 比如我们的回调在Activity中处理数据,当我们把Activity关闭后,如果获取到数据时,...

shzwork
43分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部