ios UITableView - 使用 Swift 注册类
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/25347406/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
UITableView - registerClass with Swift
提问by Stuart Breckenridge
Is anyone else having an issue using the tableView.registerClass
method with Swift?
还有其他人在使用tableView.registerClass
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...
它不再出现在我的代码完成中(如果手动输入,我也不能使用它)但它仍然在标题中......
回答by Woodstock
It works for me perfectly.
它非常适合我。
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
Exactly as I have it above.
正如我上面所说的那样。
回答by Dinesh Katwal
For Swift 2.2 Register For Default Cell From Class
对于 Swift 2.2 从类注册默认单元格
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")
For Swift 3.0 Register For Default Cell From Class
对于 Swift 3.0 从类注册默认单元格
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")
For Swift 2.2 Register For Default Cell From Nib
对于 Swift 2.2 从 Nib 注册默认单元格
self.tableView.registerNib(UINib(nibName: "CustomCellName", bundle: nil), forCellReuseIdentifier: "CustomCellIdentifer")
For Swift 3.0 Register For Default Cell From Nib
对于 Swift 3.0 从 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.
注意:Storyboard 创建的单元格称为原型单元格,并且有一些程序可以像 Nib 一样注册原型单元格。不要忘记设置单元格标识符,如下所示。
回答by Qiulang
Swift has once again renamed it to
Swift 再次将其重命名为
tableView.register(UITableViewCell.self, forCellReuseIdentifier:"DefaultCell")
表视图。注册(UITableViewCell.self, forCellReuseIdentifier:"DefaultCell")
Really don't understand why they bothered so much about this particular naming
真的不明白为什么他们对这个特定的命名如此费心
回答by swiftBoy
Updated for Swift 5
为 Swift 5 更新
Register TableView Cell in viewDidLoad If you are using Default Cell
如果您使用的是默认单元格,则在 viewDidLoad 中注册 TableView 单元格
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyTableCell")
Register TableView Cell in viewDidLoad If you are using Custom Nib/XIB Cell
在 viewDidLoad 中注册 TableView Cell 如果您使用的是Custom Nib/XIB Cell
tableView.register(UINib(nibName: "MyCustomCell", bundle: nil), forCellReuseIdentifier: "MyCustomCell")
回答by Rinju Jain
For swift 4
快速 4
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
回答by Gurjinder Singh
Swift 4 and 4.1. making generic methods it is very easy to register and dequeue table cell.
斯威夫特 4 和 4.1。制作通用方法很容易注册和出列表格单元格。
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 {
}
回答by Zgpeace
I prefer to use TableViewCell.self to generate the identifier string. It can reduce the typing error.
我更喜欢使用 TableViewCell.self 来生成标识符字符串。它可以减少打字错误。
tableView.register(MyCell.self, forCellReuseIdentifier: String(describing: MyCell.self))
回答by Amit Thakur
For swift 3 refer this. It works!
对于swift 3,请参阅this。有用!
Inside you viewdidload function
在你里面 viewdidload 函数
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "LabelCell")
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "LabelCell")
回答by Henry Heleine
Switching the order in which I called registerNib and registerClass worked for me!
切换我调用 registerNib 和 registerClass 的顺序对我有用!
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.
希望对你们中的一些人有所帮助。