58

tableView.registerClass其他人在使用Swift的方法时遇到问题吗?

它不再为我提供代码完成功能(如果手动输入,我也无法使用它)但它仍然在标题中......

代码完成

UITableView 标头

4

9 回答 9

104

它非常适合我。

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

正如我上面所说的那样。

于 2014-08-17T08:30:33.153 回答
14

对于 Swift 2.2 从类中注册默认单元格

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



对于 Swift 3.0 从类中注册默认单元格

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



对于 Swift 2.2 从 Nib 注册默认单元格

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



对于 Swift 3.0 从 Nib 注册默认单元格

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

注意: Storyboard 创建的单元格称为原型单元格,并且有一些注册原型单元格的程序,如 Nib。不要忘记设置单元格标识符,如下所示。 在此处输入图像描述

于 2016-11-07T08:16:13.300 回答
3

斯威夫特再次将其重命名为

表视图。注册(UITableViewCell.self, forCellReuseIdentifier:"DefaultCell")

真的不明白为什么他们对这个特定的命名如此烦恼

于 2017-01-17T03:06:09.843 回答
3

为 Swift 5 更新

如果您使用的是默认单元格,请在 viewDidLoad 中注册 TableView 单元格

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

在 viewDidLoad 中注册 TableView Cell 如果您使用的是自定义 Nib/XIB Cell

tableView.register(UINib(nibName: "MyCustomCell", bundle: nil), forCellReuseIdentifier: "MyCustomCell")
于 2019-08-23T19:04:32.733 回答
2

我更喜欢使用 TableViewCell.self 来生成标识符字符串。它可以减少打字错误。

tableView.register(MyCell.self, forCellReuseIdentifier: String(describing: MyCell.self))
于 2020-03-30T06:42:51.710 回答
1

斯威夫特 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  {
    }
于 2018-09-23T18:49:21.517 回答
1

对于迅捷4

self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
于 2018-05-10T09:48:54.070 回答
0

对于 swift 3,请参阅此。有用!

在你里面 viewdidload 函数

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

于 2017-05-30T15:07:55.160 回答
-3

切换我调用 registerNib 和 registerClass 的顺序对我有用!

出于某种原因,当我遇到以下情况时,我的应用程序崩溃了:

...注册笔尖.....

...注册类...

但是当我有时运行良好:

...注册类...

...注册笔尖.....

希望对你们中的一些人有所帮助。

于 2015-05-11T20:01:05.650 回答