专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构

父类设置tableView数据源和代理

  • tableView 设置为懒加载的,方便子类使用
    // MARK: - 懒加载
    /// 访客视图
    private lazy var visitorView: HMVisitorView = HMVisitorView()
    //
    /// tableView
    lazy var tableView: UITableView = UITableView(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
    
  • HMBaseViewControllerloadView 设置 tableView 的数据源和代理

    class HMBaseViewController: UIViewController {
    
      /// 用户是否登入标志
      var userLogin = true
      //
      override func loadView() {
          if userLogin {
              // 使用talbeView
              self.view = tableView
    
              tableView.delegate = self
              tableView.dataSource = self
          } else {
              setupVisitorView()
          }
      }
      ...
    }
    
  • HMBaseViewController 添加 extension 实现数据源和代理

    // MARK: - tableView数据源
    extension HMBaseViewController: UITableViewDataSource {
      func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
          return 0
      }
    
      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
          return UITableViewCell(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
      }
    }
    
    // MARK: - tableView代理
    extension HMBaseViewController: UITableViewDelegate {
    }
    

子类测试tableView的数据源和代理

class HMDiscoveryViewController: HMBaseViewController {

    let items = ["a", "b", "c", "d", "e", "f", "g", "h"]

    override func viewDidLoad() {
        super.viewDidLoad()

        // 注册cell
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
    }
}

// MARK: - tableView数据源
extension HMDiscoveryViewController {
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return items.count
    }
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        cell.textLabel?.text = self.items[indexPath.row]

        return cell
    }
}

results matching ""

    No results matching ""