Swift-UIKit-UITableView

1.描述

通过单独列和自定义行内容来展示数据的视图(Display data in a single column of customizable rows.)

image.png

表视图(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

你可能感兴趣的:(Swift-UIKit-UITableView)