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


    列表显示,顾名思义它是在一个列表视图的形式显示在屏幕上的数据的内容。于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];
    }

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


    表视图的协议方法——这是很重要的部分,由于我们创建一个表视图,目的就是让视图能够显示数据,否则一个空空的表视图与废物无二。表视图所定义的协议方法由代理方法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表示眼下正在创建的单元格位于整个表视图的第几行。
    编译。执行,显示结果:


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

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

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

  • 相关阅读:
    素数
    Java日期时间使用(转)
    mysql中函数(转)
    java环境配置
    volley三种基本请求图片的方式与Lru的基本使用:正常的加载+含有Lru缓存的加载+Volley控件networkImageview的使用
    Volley的三种基本用法StringRequest的Get和post用法以及JsonObjectRequest
    DOM生成&解析
    Pull生成&解析
    HDU.2503 a/b + c/d (分式化简)
    HDU.2503 a/b + c/d (分式化简)
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4799240.html
Copyright © 2020-2023  润新知