Swift5.x的UITableView纯代码演练

向子安
2023-12-01

Swift5.x的UITableView纯代码演练

//
//  ViewController.swift
//  1-UITableView演练
//  Created by 鲁军 on 2021/3/13.

/*
 CMD + Shift + O  快速打开文件
 CMD + Shift + J 快速定位文件
 **/
import UIKit
class ViewController: UIViewController {
    private lazy var tableView : UITableView = { () -> UITableView in
        //在实例化 tableView的时候,需要指定样式,指定之后 不能再修改
        let tb = UITableView(frame: CGRect.zero, style: .plain)
        //设定数据源
        tb.dataSource = self
        //注册可重用cell  [UITableViewCell class]    //纯代码注册一个可重用的cell
        tb.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") //使用一行代码需要注册,必须注册
        //使用三行代码的时候,可以不注册,但是必须进行强制解包
        return tb
    }()
        //第二种懒加载的方式
//    private lazy var tableView2 : UITableView = {
//        let tb1 = UITableView(frame: CGRect.zero, style: .plain)
//        return tb1
//    }()
    //是用纯代码创建视图层次结构  和 storyboard / xib 等价
    override func loadView() {
        //在访问 view的时候 如果view == nil 会自动调用loadView 方法
        // print(view)
        //设置视图
        view  = tableView
        print(tableView)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

//将 一起相关的代码放在一起 便于阅读和维护    //遵守数据源的协议
// 在swift中 遵守协议的写法 类似于其他语言的多继承
//测试题  OC 中 有多继承吗   如果没有  如果替代 !
extension ViewController : UITableViewDataSource,UITableViewDelegate{
    //UITableViewController 会需要override  因为 UITableViewController 已经遵守了协议
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 50
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // 使用此方法  必须注册可重用cell 在ios6.0推出的 替代以下三行代码  //在storyboard 添加 Cell identity
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        cell.textLabel?.text = "hello \(indexPath.row)"
        return cell
        
        //以下代码在ios 7.0 之后就不太使用了
        //使用此方法 不要求必须注册可重用的cell 返回值是可选的
        /*
        var cell = tableView.dequeueReusableCell(withIdentifier: "cell")
        if cell==nil {
            cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
        }
         //  cell?.textLabel //可选的
        cell?.textLabel?.text = "hello \(indexPath.row)"
        return cell!
        */
    }
}


 类似资料: