Ios UITableView-带有Swift的registerClass

Ios UITableView-带有Swift的registerClass,ios,swift,uitableview,registerclass,Ios,Swift,Uitableview,Registerclass,是否有其他人在使用Swift的tableView.registerClass方法时遇到问题 对于我来说,它不再是代码完成(如果手动输入,我也不能使用它),但它仍然在标题中 它非常适合我 self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") 正如我上面所说的那样。切换我调用registerNib和registerClass的顺序为我工作 由于某种原因,我的应用程序在以下情况

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

对于我来说,它不再是代码完成(如果手动输入,我也不能使用它),但它仍然在标题中


它非常适合我

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

正如我上面所说的那样。

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

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

…注册表项

…注册表类

但当我:

…注册表类

…注册表项


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

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

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


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

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


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

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


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

self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")
self.tableView.registerNib(UINib(nibName: "CustomCellName", bundle: nil), forCellReuseIdentifier: "CustomCellIdentifer")
self.tableView.registerNib(UINib(nibName: "CustomCellName", bundle: nil), forCellReuseIdentifier: "CustomCellName")
注意:故事板创建的单元称为原型单元,并有一些过程来注册Nib之类的原型单元。不要忘记如下设置单元标识符。
斯威夫特再次将其重命名为

tableView.注册(UITableViewCell.self,强制重用标识符:“DefaultCell”)


我真的不明白为什么他们会为这个特殊的命名而烦恼这么多

对于swift 3,请参考这个。它起作用了

在viewdidload函数中

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

用于swift 4

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

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  {
    }
override func viewDidLoad(){
super.viewDidLoad()
self.tblView.register(CellProfileOther.self)//单元类名称
}
func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
let cell:CellProfileOther=tableView.dequeueReusableCell(forIndexPath:indexPath)
返回单元
}
扩展UITableView{
func寄存器(uu:T.Type),其中T:ReusableView,T:NibLoadableView{
let bundle=bundle(对于:T.self)
设nib=UINib(nibName:T.nibName,bundle:bundle)
self.register(nib,forCellReuseIdentifier:T.defaultReuseIdentifier)
}
func dequeueReusableCell(forindexath:indexath)->T其中T:ReusableView{
guard let cell=self.dequeueReuseAbleCell(标识符为:T.defaultReuseIdentifier,for:indexPath)作为?T else{
fatalError(“无法将标识符为\(T.defaultReuseIdentifier)的单元格出列”)
}
返回单元
}
}
协议可重用视图:类{
静态变量defaultReuseIdentifier:字符串{get}
}
协议NibLoadableView:类{
静态变量nibName:字符串{get}
}
扩展可重用视图,其中Self:UIView{
静态变量defaultReuseIdentifier:String{
返回字符串(描述:Self.Self)
}
}    
扩展NibLoadableView,其中Self:UIView{
静态变量nibName:字符串{
返回字符串(描述:Self.Self)
}
}
//这是细胞分类
类CellProfileOther:UITableViewCell、ReusableView、NibLoadableView{
}

为Swift 5更新

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

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


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

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

这太疯狂了…在操场上的桌面视图很好用。已卸载并重新安装Xcode…但无效:-(你能再展示一点代码吗?你是如何声明表视图、类等的。今天早上安装了Xcode beta 6,这就更正了自己。将你的代码标记为正确答案是因为,好吧,代码是正确的。为什么Swift会将这个UITableViewCell.self改为UITableViewCell.class?它被重命名为self.tableView.register(UITableViewCell.self,强制重用标识符:“单元格”)为什么要同时调用
registerNib
registerClass
?如果你
registerNib
,你通常会在NIB中设置类本身。啊,也许没有这行代码就可以链接正确的类,但我需要它来运行我的代码,而不是碰到一个问题,那就是
registerClass
registerNib
是互斥的。只有最后一个调用的才适用。因此,在第一个示例中,
registerClass
替换了
RegisterInB
,除非以编程方式构建单元,否则它将崩溃。在第二个示例中,它将正确使用NIB,但
registerClass
调用是多余的。