首页 > 解决方案 > 表格视图单元格的案例。迅速

问题描述

我有一个tableview,我做了 cell.xib。在这些tableview中会有不同cell的 s 我对 . 做同样的事情xib

我如何使用它的一个例子。

 if indexPath.row == 0 {
         let cell = tableView.dequeueReusableCell( withIdentifier: TableViewCellOne.identifier,
            for: indexPath) as? TableViewCellOne

        return cell ?? UITableViewCell()
        }

if indexPath.row == 1 {
         let cell = tableView.dequeueReusableCell( withIdentifier: TableViewCellTwo.identifier,
            for: indexPath) as? TableViewCellTWo

        return cell ?? UITableViewCell()
        }
              return UITableViewCell()
        }

但我不喜欢这种方法。我该怎么做case

标签: iosswiftuitableviewuiviewuicollectionview

解决方案


您可以像这样编写协议DequeueInitializable及其扩展

protocol DequeueInitializable {
    static var reuseableIdentifier: String { get }
}

extension DequeueInitializable where Self: UITableViewCell {

    static var reuseableIdentifier: String {
        return String(describing: Self.self)
    }

    static func dequeue(tableView: UITableView) -> Self {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: self.reuseableIdentifier) else {
            return UITableViewCell() as! Self
        }
        return cell as! Self
    }
    static func register(tableView: UITableView)  {
        let cell = UINib(nibName: self.reuseableIdentifier, bundle: nil)
        tableView.register(cell, forCellReuseIdentifier: self.reuseableIdentifier)
    }
}

extension DequeueInitializable where Self: UICollectionViewCell {

    static var reuseableIdentifier: String {
        return String(describing: Self.self)
    }

    static func dequeue(collectionView: UICollectionView,indexPath: IndexPath) -> Self {

       let cell = collectionView.dequeueReusableCell(withReuseIdentifier: self.reuseableIdentifier, for: indexPath)

        return cell as! Self
    }
     static func register(collectionView: UICollectionView)  {
          let cell = UINib(nibName: self.reuseableIdentifier, bundle: nil)
          collectionView.register(cell, forCellWithReuseIdentifier: self.reuseableIdentifier)
      }
}

然后使用此协议确认您的单元格

class TableViewCellOne: UITableViewCell, DequeueInitializable {
}

然后在你的cellForRow方法中

switch (indexPath.row) {
   case 0:
    return TableViewCellOne.dequeue(tableView: tableView)
   case 1:
    return TableViewCellTwo.dequeue(tableView: tableView)
   default:
   return UITableViewCell()
}

推荐阅读