【iOS7一些总结】9、与列表显示(在):列表显示UITableView

【iOS7一些总结】9、与列表显示(在):列表显示UITableView

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

列表显示,顾名思义它是在一个列表视图的形式显示在屏幕上的数据的内容。于ios在列表视图UITableView达到。这个类在实际应用中频繁,是很easy理解。这里将UITableView的主要使用方法总结一下以备查。

UITableView定义在头文件UITableView.h中,详细的定义能够查看官方文档从定义中能够看出,UITableView继承自UIScrollView类,因此在支持方便地显示列表数据的同一时候,还天生支持垂直滚动操作。

组成列表的每个元素称为UITableViewCell实例。

一个UITableViewCell也是应用很广泛的类,定义可见官方文档

在详细的使用过程中,能够创建一个独立的UITableView,也能够直接创建一个UITableViewController。这里主要记录创建UITableView的方法,下篇记录通过列表视图控制器使用UITableView。

UITableView类中定义了style属性:

@property(nonatomic, readonly) UITableViewStyle style

每个
UITableView都能够选择两种style之中的一个。即分组模式和平面模式。这两种模式定义在枚举变量UITableViewStyle中:

typedef enum {
   UITableViewStylePlain,
   UITableViewStyleGrouped
} UITableViewStyle;

每个列表视图的组成都是相似的,都是由一个表头视图+表体+表尾视图构成。当中表头和表尾两个视图默觉得nil。须要时能够创建自己定义视图加入到表头和表尾。定义例如以下:

@property(nonatomic, retain) UIView *tableHeaderView;
@property(nonatomic, retain) UIView *tableFooterView;

除表头和表尾之外,表体则由一串UITableViewCell(以下简称cell)构成。假设是分组表视图。则多个
UITableViewCell构成一个section,每一个section也有头和尾视图。

以下简单新建一个demo展示一下怎样创建一个UITableView。

这里假定大家都了解xcode的基本操作,所以就不再一步一步地截图了,简单叙述就可以。不懂得能够去百度一下“xcode新建project”。

新建一个single view application。在新生成的ViewController.m文件里重写loadView方法,新建一个UITableView视图。

(别忘了把alloc的视图在dealloc函数中释放。)

- (void)loadView
{
    CGFloat width = [UIScreen mainScreen].bounds.size.width;
    CGFloat height = [UIScreen mainScreen].bounds.size.height;
    
    UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width,height)];
    self.view = backgroundView;
    
    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, width, height) style:UITableViewStylePlain];
    [self.view addSubview:_tableView];
    [_tableView release];
}

编译执行。显演示样例如以下图:

【iOS7一些总结】9、与列表显示(在):列表显示UITableView

表视图的协议方法——这是很重要的部分,由于我们创建一个表视图,目的就是让视图能够显示数据,否则一个空空的表视图与废物无二。表视图所定义的协议方法由代理方法delegate和数据源方法data source方法组成。

托付方法一般用于实现个性化处理表视图的基本样式(如单元格的高度等)以及捕捉单元格选中的响应。数据源方法用于完毕表中的数据。如指定单元格数。以及创建每个单元格。

要实现代理和数据源方法。首先须要让当前视图控制器支持UITableViewDelegate和UITableViewDataSource协议。做例如以下改动:

@interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>

而且在tableView创建完毕后,将tableView的delegate和dataSource设置为self,即托付给当前视图控制器来控制表视图的数据显示和响应。

_tableView.delegate = self;
_tableView.dataSource = self;

delegate和data source协议有两个方法是必须实现的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

这两个方法分别用于生成每个cell。以及指定当前section共同拥有多少行。

实现这两个方法是想要在表视图中显示数据必须实现的最低要求。

我们在视图控制器头文件里声明一个NSArray *model(retain属性),并在viewDidLoad中将[UIFont familyNames]赋给这个属性。

在视图控制器中实现这两个代理方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [_model count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identify = @"TableViewCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identify];
    
    if (nil == cell)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identify];
        cell.textLabel.text = self.model[indexPath.row];
    }
    
    return cell;
}

在cellForRowAtIndexPath方法中,首先会检查是否有闲置的单元格,假设没有闲置的单元格。则会新建一个cell并将其返回。參数indexPath表示眼下正在创建的单元格位于整个表视图的第几行。
编译。执行,显示结果:

【iOS7一些总结】9、与列表显示(在):列表显示UITableView

假设希望实现对选中某个单元格的响应,仅仅须要实现以下代理方法就可以。在代理方法中能够实现创建新的视图控制器并控制其载入到屏幕上。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117085.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • noip2018普及组初赛解析_NOIP复赛

    noip2018普及组初赛解析_NOIP复赛博主是一个高中生,在进行noip训练的时候遇到这一题,当时写了2个多小时惭愧啊惭愧,只能感叹一声普及组好可怕!!!然而这题在code.vs里只有黄金。。。我现在很怀疑自己是怎么做出那些大师题的。。。原题链接在此:http://codevs.cn/problem/1133/好了,现在我们来分析一下这个题目。这个题目中读入的字符串是只有‘*’、‘+’、‘(‘和’)‘的,而

    2022年9月25日
    2
  • 关于Json 与 Request Header 的Content-Type 一些关系。

    关于Json 与 Request Header 的Content-Type 一些关系。由于最近遇到关于ashx文件ajax解析参数的问题。查询网上很多资料后,已经解决。鉴于网上已经足够多的,关于这个问题的文章。大部分内容来自互联网,我这里只是做一些整理和记录。特此说明并非原创。Content-Type是返回消息中非常重要的内容,表示后面的文档属于什么MIME类型。Content-Type:[type]/[subtype];parameter。例如最常见的就是text/htm…

    2022年8月24日
    7
  • 必须为元素类型 “mapper” 声明属性 “namespace” 或The content of element type “mapper” must match “EMPTY”

    必须为元素类型 “mapper” 声明属性 “namespace” 或The content of element type “mapper” must match “EMPTY”

    2021年7月19日
    103
  • html超链接位置怎么改,如何修改HTML超链接样式?

    html超链接位置怎么改,如何修改HTML超链接样式?在网页开发中,我们不免会用到超链接,将内容链接到原网页上。如果不对超链接进行设置,链接默认以固定样式显示,过于单一。那么我们要如何修改HTML中的超链接呢?这篇文章W3Cschool小编为大家介绍一下。我们都知道,超链接是用标签来显示的。如果我们需要修改样式,则需要通过CSS修改它的样式。标签的样式还分为四个类型,分别为未访问、已访问、鼠标滑过、点击。a:link:未被访问的链接a:v…

    2022年7月19日
    28
  • python ssh连接_pycharm显示no module named

    python ssh连接_pycharm显示no module named文章目录报错问题分析解决方案1.把id_rsa转换成PuTTY2.id_rsa转换成RSA参考报错在Pycharm中用密钥登录的时候会报错[1/4/202110:54AM]Uploadtogpu11-188failed:keypair‘C:\Users\xx.ssh\id_rsa’iscorruptorhasunknownformat.OnlySSH2keysinOpenSSHformat(DSA,RSAorECDSA)orPuT

    2022年8月27日
    4
  • SQL经典语句大全及应用示例汇总

    SQL经典语句大全及应用示例汇总SQL经典语句大全及应用示例汇总无论您是一位SQLsever的新手,或是一位只是需要对SQL复习一下的资料仓储业界老将,您就来对地方了。本期专题精选了SQl语句、SQL语法、实例和教程等经典相关资源,助您SQL语句学习快速入门,让您一次看个够。可以下载附件留存~资源名称资源地址SQL语句大全【经典教程】…

    2022年5月15日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号