【UIKit】表格自定义单元格(UITableViewCll)

自定义表格单元格(Cell)操作

使用NIb文件自定义单元格(Cell)

1、          创建UITableViewCell的子类,创建的同时记得选择生成xib文件(当然你也可以将控件通过代码的方式添加上去)。

2、          打开生成的xib文件中添加控件和设置布局约束。

3、         需要将Nib文件的控件与cell类关联起来,这样才可以把数据放在控件上显示。

4、           使用的时候在tableView的cell类型设置为1创建的类。

 将cell添加到TableView上。

1、          创建UITableViewController的子类。

2、          处理好数据源,放在数组中。

4、 向表格中注册cell,调用tableView的registerXXX方法。

3、          实现表格的委任代理和数据源代理。

a、          设置多少section

b、          设置每个section的行数

c、           获取、配置和显示每个单元格的数据(获得单元格的使用注意【易错点】dequeueReusableCellWithIdentifier函数的参数必须与IB中自定义的CellIdentifier一致)

4、  将视图的Cell类型与子类关联起来(选中TabelViewController视图下的cell模块,点击属性,在类文本框中选择1创建的子类)

 三种设置Cell的高度的办法。

方法1:通过设置属性rowHeight统一行高【适合所有Celll高度一致】

方法2:每行设置,实现tablevie的heightForRowAtIndexPath方法设置每个cell的高度【适合多类高度一致的Cell】。

方法3:   通过设置cell布局约束,由系统根据约束关系自动确定每个cell的高度[适合动态高度]。

 self.tableView.estimatedRowHeight=控件默认值;

 self.tableView.rowHeight=UITableView.automaticDimension;//重点

官网文档:传送门

如何设置cell的frame、bound和透明度?

通过继承cell,在cell的子类中重构setFrame方法可以调整cellframebound和透明度(默认是无法直接更改的

五、自定义单元格使用实例:

 

1.新建工程,新建文件,选择cocoaTouchClass,在第二个输入框(根类)输入tableViewCell,再在第一个输入框输入自己对自定义cell的命名(注意首字母大写)

勾选下面的同时产生xib文件复选框,如下图:

【UIKit】表格自定义单元格(UITableViewCll)_第1张图片

2打开刚刚产生的文件的后缀名为.xib的文件,在自定义的cel中添加需要的控件和约束,之后一定要在右边的属性identifier添加名字否则会失败,如下图的3

【UIKit】表格自定义单元格(UITableViewCll)_第2张图片

3.打开辅助编辑模式,将xib文件中的控件都映射到.swift文件中(control+拖拽)。如下图

【UIKit】表格自定义单元格(UITableViewCll)_第3张图片

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.效果截图如下

【UIKit】表格自定义单元格(UITableViewCll)_第4张图片

 

有可能发生的错误:

1.invalid nib registered for identifier (cell2) - nib must contain exactly one top level object which must be a UITableViewCell instance

这个错误是注册不合法,有可能的原因是:你相应的xib文件中有多了一个控件实例。。

解决:把多的那个删除就好了。

 

 

                               

 

你可能感兴趣的:(#,UI控件)