UITableView - registerClass with Swift

前端 未结 9 1975
一向
一向 2021-02-06 20:17

Is anyone else having an issue using the tableView.registerClass method with Swift?

It no longer comes in code completion for me (nor can I use it if manual

相关标签:
9条回答
  • 2021-02-06 21:14

    Swift 4 and 4.1. making generic methods it is very easy to register and dequeue table cell.

           override func viewDidLoad() {
                    super.viewDidLoad()
                    self.tblView.register(CellProfileOther.self) // cell class name
           }
            func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                    let cell: CellProfileOther = tableView.dequeueReusableCell(forIndexPath: indexPath)
                    return cell
                }
            extension UITableView {
            func register<T:UITableViewCell>(_: T.Type) where T: ReusableView, T: NibLoadableView {
                    let bundle = Bundle(for: T.self)
                    let nib = UINib(nibName: T.nibName, bundle: bundle)
                    self.register(nib, forCellReuseIdentifier: T.defaultReuseIdentifier)
                }
            func dequeueReusableCell<T:UITableViewCell>(forIndexPath indexPath: IndexPath) -> T where T: ReusableView {
                    guard let cell = self.dequeueReusableCell(withIdentifier: T.defaultReuseIdentifier, for: indexPath) as? T else {
                        fatalError("Could not dequeue cell with identifier: \(T.defaultReuseIdentifier)")
                    }
                    return cell
                }
            }
    
            protocol ReusableView: class {
                static var defaultReuseIdentifier: String { get }
            }
    
            protocol NibLoadableView: class {
                static var nibName: String { get }
            }
    
            extension ReusableView where Self: UIView {
                static var defaultReuseIdentifier: String {
                    return String(describing: Self.self)
                }
            }    
            extension NibLoadableView where Self: UIView {
                static var nibName: String {
                    return String(describing: Self.self)
                }
            }
    
       // Here is cell class 
        class CellProfileOther: UITableViewCell, ReusableView, NibLoadableView  {
        }
    
    0 讨论(0)
  • 2021-02-06 21:18

    For Swift 2.2 Register For Default Cell From Class

    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")
    



    For Swift 3.0 Register For Default Cell From Class

    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")
    



    For Swift 2.2 Register For Default Cell From Nib

    self.tableView.registerNib(UINib(nibName: "CustomCellName", bundle: nil), forCellReuseIdentifier: "CustomCellIdentifer")
    



    For Swift 3.0 Register For Default Cell From Nib

    self.tableView.registerNib(UINib(nibName: "CustomCellName", bundle: nil), forCellReuseIdentifier: "CustomCellName")
    

    Note: Storyboard created cell is called prototype cell and have some procedure to register prototype cell like Nib.And Don't forget to set the cell identifier like below.

    0 讨论(0)
  • 2021-02-06 21:18

    Updated for Swift 5

    Register TableView Cell in viewDidLoad If you are using Default Cell

    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyTableCell")
    

    Register TableView Cell in viewDidLoad If you are using Custom Nib/XIB Cell

    tableView.register(UINib(nibName: "MyCustomCell", bundle: nil), forCellReuseIdentifier: "MyCustomCell")
    
    0 讨论(0)
提交回复
热议问题