UITableView - registerClass with Swift

眉间皱痕 提交于 2019-12-04 09:50:10

问题


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 manually typed) but it is still in the headers...


回答1:


It works for me perfectly.

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

Exactly as I have it above.




回答2:


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.




回答3:


Swift has once again renamed it to

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

Really don't understand why they bothered so much about this particular naming




回答4:


For swift 4

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



回答5:


For swift 3 refer this. It works!

Inside you viewdidload function

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




回答6:


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  {
    }



回答7:


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")



回答8:


Switching the order in which I called registerNib and registerClass worked for me!

For some reason my app crashed when I had:

...registerNib.....

...registerClass...

But ran fine when I had:

...registerClass...

...registerNib.....

Hope that helps some of you.



来源:https://stackoverflow.com/questions/25347406/uitableview-registerclass-with-swift

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!