UITableView-带Swift的registerClass

2020/12/01 18:11 · ios ·  · 0评论

使用tableView.registerClassSwift方法是否还有其他人遇到问题

它不再对我来说完成代码填充(如果手动键入也无法使用它),但它仍在标题中...

代码补全

UITableView标头

它完全适合我。

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

就像我上面所说的一样。

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

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

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

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

对于Swift 2.2,从笔尖注册默认单元格

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

对于Swift 3.0,从笔尖注册默认单元格

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

注意:故事板创建的单元格称为原型单元格,并具有一些步骤来注册原型单元格(如Nib),并且不要忘记像下面那样设置单元格标识符。
在此处输入图片说明

Swift再次将其重命名为

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

真的不明白为什么他们对这种特殊的命名如此困扰

已为Swift 5更新

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

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

如果使用自定义Nib / XIB单元,请在viewDidLoad中注册TableView单元

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

迅捷4

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

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

您内部的viewdidload函数

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

Swift 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  {
    }

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

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

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

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

... registerNib .....

... registerClass ...

但是当我有时运行得很好:

... registerClass ...

... registerNib .....

希望对您有所帮助。

本文地址:http://ios.askforanswer.com/uitableview-daiswiftderegisterclass.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!