【精】表格(UITableView)总结(1):介绍与基础实现

转载请声明出处:http://blog.csdn.net/jinnchang/article/details/45028267

1、表视图(UITableView)

UITableView 继承自 UIScrollView。一个表视图可以由多个分段(section)组成,每个分段可以有一个头和尾。很多情况下表视图只有一个分段,而且不显示头尾。表视图本身也可以有一个头(显示在第一个分段之前)和一个尾(显示在最后一个分段之后)。一个表视图的整体元素结构示意图如下:

(1)表视图风格

UITableView 有以下两种样式(UITableViewStyle)

  • Plain(普通样式)
  • Grouped(分组样式)

上述两种风格本质无区别,只是显示样式不同而已。

(2)表视图分割线(Separator)

分割线有以下三种样式(UITableViewCellSeparatorStyle)

  • None(无分割线)
  • SingleLine(单线条)
  • SingleLineEtched(带浮雕效果的线条)

(3)表视图单元格(Cell)

Cell 有以下四种显示样式(UITableViewCellStyle)

  • Default(左侧显示 textLabel,不显示 detailTextLabel,最左边可选显示 imageView)
  • Value1(左侧显示 textLabel,右侧显示 detailTextLabel,最左边可选显示 imageView)
  • Value2(左侧依次显示 textLabel、detailTextLabel,最左边可选显示 imageView)
  • Subtitle(左侧上方显示 textLabel,左侧下方显示 detailTextLabel,最左边可选显示 imageView)

Cell 有以下四种选中样式(UITableViewCellSelectionStyle)

  • None
  • Blue
  • Gray
  • Default

(4)附属图形(Accessory)

单元格的 Accessory 有以下五种样式(UITableViewCellAccessoryType)

  • None(无附属图形)
  • DisclosureIndicator(小箭头)
  • DetailDisclosureButton(详细信息按钮 + 指向右侧的箭头)
  • Checkmark(勾号)
  • DetailButton(详细信息按钮)

2、UITableView 协议

iOS 遵循 MVC 设计模式,很多操作通过代理和外界沟通,UITableView 同理实现了以下两种协议:

  • UITableViewDelegate
  • UITableViewDataSource

以下是官方分别对这两个协议的原文介绍:

UITableViewDelegate has no required methods. It declares methods that allow the delegate to modify visible aspects of the table view, manage selections, support an accessory view, and support editing of individual rows in a table.

UITableViewDataSource has two required methods. The "numberOfRowsInSection" method tells the table view how many rows to display in each section, and the "cellForRowAtIndexPath" method provides the cell to display for each row in the table. Optional methods
allow the data source to configure multiple sections, provide headers and/or footers, and support adding, removing, and reordering rows in the table.

3、表视图控制器(UITableViewController)

很多时候一个 UIViewController 中只有一个 UITableView,因此苹果官方为了方便大家开发直接提供了一个 UITableViewController,这个控制器实现了 UITableView 数据源和代理协议,内部定义了一个 tableView 属性供外部访问,同时自动铺满整个屏幕、自动伸缩以方便我们的开发。如果需要用到 Table View 是不充满全屏的话,我们应该使用 UIViewController
自己创建和维护 UITableView。

从一定层面上来说,除了方便、自动设置委托和数据源属性外,表视图控制器没有任何其它的优势。

4、UITableView 基础示例

//
//  ViewController.swift
//  UITableViewSample-Basic
//
//  Created by jinnchang on 15/4/12.
//  Copyright (c) 2015年 Jinn Chang. All rights reserved.
//

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        tableView = UITableView(frame: CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height), style: .Plain)
        tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
        tableView.delegate = self
        tableView.dataSource = self

        self.view.addSubview(tableView)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 20
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
        cell.textLabel?.text = "\(indexPath.row)"
        return cell
    }

}

GitHub 上项目地址:https://github.com/jinnchang/SwiftSamples/tree/master/advanced/UITableViewSample-Basic

5、结语

参考资料如下:

About
Table Views in iOS Apps

UITableView Class Reference

文章最后更新时间:2015年4月13日16:43:52

时间: 2024-10-06 05:07:51

【精】表格(UITableView)总结(1):介绍与基础实现的相关文章

iOS中表格(UITableView)嵌套表格的简单实现

iOS中表格(UITableView)嵌套表格的简单实现 首先说一下思路:我们在一个控制器里面定义2个tableview,一个作为被嵌套的rootTable,一个作为嵌套的表格tableView1,那我们要实现UITableViewDelegate,UITableViewDataSource,的代理的时候,该怎么区分呢?其实很简单,有两种方法,一个是给定义的2个tableview设置tag值,另一个是直接写出来tableView == rootTable时实现他得代理,否则就实现tableVie

HTML5 Canvas(画布)实战编程初级篇:基本介绍和基础画布元素

欢迎大家阅读HTML5 Canvas(画布)实战编程初级篇系列,在这个系列中,我们将介绍最简单的HTML5画布编程.包括: 画布元素 绘制直线 绘制曲线 绘制路径 绘制图形 绘制颜色,渐变和图案 绘制图片 绘制文本 相关要求 环境要求:Google Chrome, Firefox, Safari, Opera, 或者 IE9以上的现代浏览器 编程要求:需要有基础的HTML和Javascript编程经验,相关的画布编程将调用Javascript API来处理 HTML Canvas基本元素 HTM

LYNC2013介绍和基础架构准备角色

LYNC2013部署系列PART1:LYNC2013介绍和基础架构准备 前言:LYNC 2013发布已经很久了,本人一直在进行相关的学习和测试,在有限的资源条件下,把能够模拟出来的角色进行了安装部署,由于平时工作还是非常忙碌,直到最近才将之前的部署整理成文档,供大家一起参考和学习,本系列没有涉及企业语音的配置,希望大家指出错误和提供建议. 基础架构准备共分为5个部分:1.LYNC2013介绍2.实验环境拓扑介绍3.DNS记录准备4.配置文件共享5.扩展AD架构 一.LYNC2013介绍下面将LY

[转]Python 解析 PDF 文本和表格的四大方法介绍

Python 解析 PDF 文本和表格的四大方法介绍 看到一个不错的知识文章,和大家分享一下: 很多文件为了安全都会存成 PDF 格式,比如有的论文.技术文档.书籍等等,程序读取这些文档内容带来了很多麻烦.Python 目前解析 PDF 的扩展包有很多,这里将对比介绍 PyPDF2.pdfplumber.pdfminer3k 以及 Camelot,告诉你哪个是好用的 PDF 解析工具. 本文使用的案例 PDF 文档下载链接: 链接: https://pan.baidu.com/s/1zH7vY4

swift:创建表格UITableView

用swift创建单元格和用iOS创建单元格形式基本相同,就是语法上有些异样.swift中调用成员方法不再使用[ ]来发送消息,而是使用.成员方法的形式调用成员函数.这种格式非常类似于java中的点成员运算符.swift中对其他类的引用不用导入头文件.这里就不废话了,现在纯代码创建UITableview实例如下: 具体实例如下: 1.首先用swift创建一个工程Project 2.再用swift创建一个Person类,生成Person.swift文件 3.在Perosn.swift文件中将设置的属

html基础介绍、基础标签以及文字样式

HTML基本介绍:html作为文件后缀名,就可以让文件变成网页,可以用浏览器所打开:实际,html是一门编程语言,叫做<超文本标记语言>:html的作用,就是制作网页: 标记:html这门语言的基本组成单元 <内容>,大部分都有开始和结束的区别 注意:把文件的后缀名改成doc 就会变成window文件,改成txt,就会变成文本文件 格式:<html> --开始标记 <head></head> --头标记,作用:用来控制网页的布局.编码.特效等内容

VRP平台总体介绍及基础配置

前言 1.VRP软件系统基础 VRP系统在启动时需要加载"系统软件"和"配置文件"两部分,这与其它品牌网络交换机的操作系统是一样的.如果指定了下次启动的补丁文件,还需加载补丁文件.修改VRP系统启动的场景一般有以下几种: a-- 对交换机进行升级操作,即系统软件从低版本至高版本升级 当增加了新特性或者需要对原有性能进行优化以及解决当前运行版本落后的问题时,则需要对交换机进行升级.此时需要加载高版本的系统软件,并重新启动交换机来实现. b -- 对交换机进行降级操作(

【写给小部员的基础微信开发教程2】php介绍及基础

//深夜码字有点困- -. 前言:此为本人所写的第一篇教程,本人将尽可能保证文中相关名词的规范与准确,但由于本人技术知识所限,难免会有所错误,恳请各位读者批评指正,一起交流学习,谢谢. 注:本教程适用于已对 html有基础认知 以及学习过 c++或c或java等编程语言的 同学. 本次教程 php基础 的内容如下: 一.概述 二.应用场景 三.基础语法 以下为正文: 一.概述 php的定义:PHP(Hypertext Preprocessor 超文本预处理器) 是一种创建动态交互性站点的强有力的

Swift - 给表格UITableView添加索引功能(快速定位)

像iOS中的通讯录,通过点击联系人表格右侧的字母索引,我们可以快速定位到以该字母为首字母的联系人分组. 要实现索引,我们只需要两步操作: (1)实现索引数据源代理方法 (2)响应点击索引触发的代理事件 效果图如下: 代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 4