Загрузить табличное представление из общего класса - PullRequest
0 голосов
/ 29 мая 2019

У меня есть определенный класс, который обрабатывает загрузку табличного представления из любого viewcontroller. Это дано как ..

class TableViewConfig<ItemsType, CellType:UITableViewCell>: NSObject, UITableViewDataSource, UITableViewDelegate {

  var emptyDataSet: Bool {
    didSet {
      if emptyDataSet {
        tableView.tableFooterView = UIView()
      }
    }
  }

  var items: [ItemsType] {
    didSet {
      tableView.dataSource = self
      tableView.delegate = self
      tableView.reloadData()
    }
  }

  // MARK: - Private Properties
  typealias CellClosure = (_ item: ItemsType, _ cell: CellType) -> Void

  // Tableview Config
  private var tableView: UITableView
  private var cellIdentifier: String
  private var configureCellClosure: CellClosure

  // Delegate
  private var indexPathClosure: ((IndexPath?) -> Void)?

  // MARK: - Public Methods
  public func selectedRow(_ callBack: @escaping (IndexPath?) -> Void) {
    indexPathClosure = callBack
  }

  // MARK: - Inialization
  init(_ tableView: UITableView,
       items: [ItemsType],
       cellIdentifier identifier: String,
       configClosure config:@escaping CellClosure) {

    self.tableView = tableView
    self.cellIdentifier = identifier
    self.items = items
    self.configureCellClosure = config
    self.emptyDataSet = false
  }

  // MARK: UITableViewDataSource
  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count
  }

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: self.cellIdentifier, for: indexPath) as! CellType
    cell.tag = indexPath.row
    configureCellClosure(items[indexPath.row], cell)
    return cell
  }

  private func item(at indexpath: IndexPath) -> ItemsType {
    return items[indexpath.row]
  }

  // MARK: UITableViewDelegate
  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if let callback = indexPathClosure {
      callback (indexPath)
    }
  }

}

Этот класс будет обрабатывать загрузку табличного представления с данными из любого viewcontroller.

Теперь моя проблема в том, что я хочу использовать этот класс и показать табличное представление в моем viewcontroller. Как мне это сделать..? Надеюсь, кто-то может помочь ...

1 Ответ

0 голосов
/ 29 мая 2019

вы должны сделать что-то вроде вашего ViewController Tableview.delegate = TableViewConfig

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...