UITableView - registerClass with Swift

2019-03-22 09:29发布

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...

Code Completion

UITableView headers

7条回答
爷的心禁止访问
2楼-- · 2019-03-22 09:52

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  {
    }
查看更多
冷血范
3楼-- · 2019-03-22 10:04

For swift 4

self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
查看更多
走好不送
4楼-- · 2019-03-22 10:09

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. enter image description here

查看更多
走好不送
5楼-- · 2019-03-22 10:13

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

查看更多
男人必须洒脱
6楼-- · 2019-03-22 10:13

For swift 3 refer this. It works!

Inside you viewdidload function

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

查看更多
不美不萌又怎样
7楼-- · 2019-03-22 10:14

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.

查看更多
登录 后发表回答