自定义表格单元格(Cell)操做html
一、 建立UITableViewCell的子类,建立的同时记得选择生成xib文件(固然你也能够将控件经过代码的方式添加上去)。ios
二、 打开生成的xib文件中添加控件和设置布局约束。swift
三、 须要将Nib文件的控件与cell类关联起来,这样才能够把数据放在控件上显示。数组
四、 使用的时候在tableView的cell类型设置为1建立的类。app
一、 建立UITableViewController的子类。ide
二、 处理好数据源,放在数组中。函数
四、 向表格中注册cell,调用tableView的registerXXX方法。布局
三、 实现表格的委任代理和数据源代理。spa
a、 设置多少section3d
b、 设置每一个section的行数
c、 获取、配置和显示每一个单元格的数据(得到单元格的使用注意【易错点】dequeueReusableCellWithIdentifier函数的参数必须与IB中自定义的Cell的Identifier一致)
四、 将视图的Cell类型与子类关联起来(选中TabelViewController视图下的cell模块,点击属性,在类文本框中选择1建立的子类)
方法1:经过设置属性rowHeight统一行高【适合全部Celll高度一致】
方法2:每行设置,实现tablevie的heightForRowAtIndexPath方法设置每一个cell的高度【适合多类高度一致的Cell】。
方法3: 经过设置cell布局约束,由系统根据约束关系自动肯定每一个cell的高度[适合动态高度]。
self.tableView.estimatedRowHeight=控件默认值;
self.tableView.rowHeight=UITableView.automaticDimension;//重点
官网文档:传送门
经过继承cell,在cell的子类中重构setFrame方法能够调整cell的frame、bound和透明度(默认是没法直接更改的)
1.新建工程,新建文件,选择cocoaTouchClass,在第二个输入框(根类)输入tableViewCell,再在第一个输入框输入本身对自定义cell的命名(注意首字母大写)
勾选下面的同时产生xib文件复选框,以下图:
2打开刚刚产生的文件的后缀名为.xib的文件,在自定义的cel中添加须要的控件和约束,以后必定要在右边的属性identifier添加名字不然会失败,以下图的3
3.打开辅助编辑模式,将xib文件中的控件都映射到.swift文件中(control+拖拽)。以下图
4.在须要使用的表格视图的控制器中写入以下代码
import UIKit class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {//添加表格协议 @IBOutlet weak var tableView: UITableView!//映射本身的UITableView var data = ["用户1","用户2","用户3"]//数据源准备 override func viewDidLoad() { super.viewDidLoad() //1.设置表格协议代理 tableView.delegate = self tableView.dataSource = self tableView.rowHeight = UITableView.automaticDimension //2.【重点】在表格中注册nib文件 self.tableView.registerNib(UINib(nibName: "TableViewCell",bundle: nil), forCellReuseIdentifier: "testCell") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } //设置表格的模块 func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } //每一个模块的行数 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return data.count } //对每行都实行数据填入 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { //【重点】定义一个重复使用的cell(通常使用常量)注意后面函数的参数名与xib文件中的identfier一致 ,还须要转化为相应的自定义cell类型。 let cell:TableViewCell = self.tableView.dequeueReusableCellWithIdentifier("testCell") as! TableViewCell cell.name.text = data[indexPath.row] cell.num.text = "\(indexPath.row+1)" return cell } }
5.效果截图以下
有可能发生的错误:
1.invalid nib registered for identifier (cell2) - nib must contain exactly one top level object which must be a UITableViewCell instance
这个错误是注册不合法,有可能的缘由是:你相应的xib文件中有多了一个控件实例。。
解决:把多的那个删除就行了。