美文网首页
Swift-UIKit-UITableView

Swift-UIKit-UITableView

作者: Vicent_Z | 来源:发表于2021-04-28 08:15 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/cocurltx.html