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...
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...
It works for me perfectly.
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
Exactly as I have it above.
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.
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
For swift 4
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
For swift 3 refer this. It works!
Inside you viewdidload function
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "LabelCell")
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 {
}
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.