UITableView - 带Swift的registerClass

时间:2014-08-17 08:08:33

标签: uitableview swift xcode6 registerclass

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

我的代码完成不再出现(如果手动输入也不能使用它),但它仍然在标题中...

Code Completion

UITableView headers

9 个答案:

答案 0 :(得分:99)

它非常适合我。

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

正如我上面所说的那样。

答案 1 :(得分:13)

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

注意:故事板创建的单元格称为原型单元格,并且有一些程序可以像Nib一样注册原型单元格。不要忘记设置单元格标识符,如下所示。 enter image description here

答案 2 :(得分:3)

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

  

tableView。 register (UITableViewCell.self,forCellReuseIdentifier:“DefaultCell”)

真的不明白他们为什么对这个特定的命名感到困扰

答案 3 :(得分:1)

对于swift 4

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

答案 4 :(得分:0)

对于swift 3,请参阅此内容。它有效!

在viewdidload函数中

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

已为Swift 5更新

  

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

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

在viewDidLoad中注册TableView单元格(如果您使用的是自定义Nib / XIB单元格

tableView.register(UINib(nibName: "MyCustomCell", bundle: nil), forCellReuseIdentifier: "MyCustomCell")

答案 7 :(得分:0)

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

tableView.register(MyCell.self, forCellReuseIdentifier: String(describing: MyCell.self))

答案 8 :(得分:-4)

切换我调用registerNib和registerClass的顺序为我工作!

由于某些原因,我的应用程序崩溃了:

... registerNib .....

...的registerClass ...

但是当我有的时候跑得很好:

...的registerClass ...

... registerNib .....

希望能帮助你们中的一些人。