1.描述
通过单独列和自定义行内容来展示数据的视图(Display data in a single column of customizable rows.)
表视图(table view)展示垂直滚动内容的单列,分成很多行(row)和段(section).表的每一行展示了一个关联App的单独的片段信息.段让我们把有关联的行分成一组.比如:联系人app使用表格展示用户联系人的姓名.
表视图是多种不同对象的一个合作的结果,包括cell,table view controller,data source和delegate对象.
表视图需要指定dataSource(数据源)和delegate(代理)对象,一般都是指向自己根视图的view controller.
UITableViewDataSource常见方法:
//每一段的行数
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
//每行展示的Cell内容
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
//段数,可选实现,不写的话默认是1段
optional func numberOfSections(in tableView: UITableView) -> Int // Default is 1 if not implemented
UITableViewDelegate常见方法:
//行高度,如果行高一致可以不实现此方法,而是复制给rowHeight属性即可.
optional func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
//指定行被选中的回调
optional func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
2.代码示例
非自定义Cell方式的核心代码
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(self.myTableView)
...
self.myTableView.dataSource = self
self.myTableView.delegate = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.myDataSource.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellID = "testCell"
var cell = self.myTableView.dequeueReusableCell(withIdentifier: cellID)
if cell == nil {
cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellID)
}
cell?.textLabel?.text = self.myDataSource[indexPath.row]
cell?.detailTextLabel?.text = "\(self.myDataSource[indexPath.row])的副标题"
cell?.imageView?.image = UIImage(named: "cellImage")
return cell!
}
自定义Cell的核心代码
- xib自定义Cell
override func viewDidLoad() {
super.viewDidLoad()
...
self.myTableView.register(UINib.init(nibName: "ThirdTableViewCell", bundle: nil), forCellReuseIdentifier: "ThirdTableViewCell")
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell : ThirdTableViewCell = self.myTableView.dequeueReusableCell(withIdentifier: "SecondTableViewCell", for: indexPath) as! ThirdTableViewCell
...
return cell
}
- 代码自定义Cell
override func viewDidLoad() {
super.viewDidLoad()
...
self.myTableView.register(SecondTableViewCell.self, forCellReuseIdentifier: "SecondTableViewCell")
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell : SecondTableViewCell = self.myTableView.dequeueReusableCell(withIdentifier: "SecondTableViewCell", for: indexPath) as! SecondTableViewCell
...
return cell
}
- 工程下载地址:
https://github.com/DeveloperZhang/SwiftStudyDemo
3.总结
UITableView是一个最基础常见的视图类,可以参考文档进行深入学习:UIKit->Views and Controls->UITableView