我在Swift 4工作,我在UITableViewCell
遇到问题。我需要5种不同类型的单元格,所以我创建了一个.xib文件并创建了5个单元格。但是当TableViewController类中的寄存器nib具有相同的xib和不同的Cell标识符时...它的崩溃:
错误:
因未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'为标识符注册的无效nib(IntakeFormTextFieldCell) - nib必须包含一个必须是UITableViewCell实例的顶级对象
我的代码是:
override func viewDidLoad() {
super.viewDidLoad()
intakeFormTableView.register(UINib(nibName: "IntakeFormViews", bundle: nil), forCellReuseIdentifier: "IntakeFormTextFieldCell")
intakeFormTableView.register(UINib(nibName: "IntakeFormViews", bundle: nil), forCellReuseIdentifier: "IntakeFormButtonCell")
// Do any additional setup after loading the view.
}
我的问题是如何从一个xib文件中使用不同的单元格?这有什么简单而好的练习方法吗?
您无法在One xib上创建多个自定义单元格。您需要为5个不同的单元格创建5个不同的Xib。您也很容易理解代码流。
override func viewDidLoad() {
super.viewDidLoad()
intakeFormTableView.register(UINib(nibName: "IntakeFormViews1", bundle: nil), forCellReuseIdentifier: "IntakeFormTextFieldCell1")
intakeFormTableView.register(UINib(nibName: "IntakeFormViews2", bundle: nil), forCellReuseIdentifier: "IntakeFormButtonCell2")
intakeFormTableView.register(UINib(nibName: "IntakeFormViews3", bundle: nil), forCellReuseIdentifier: "IntakeFormButtonCell3")
intakeFormTableView.register(UINib(nibName: "IntakeFormViews4", bundle: nil), forCellReuseIdentifier: "IntakeFormButtonCell4")
intakeFormTableView.register(UINib(nibName: "IntakeFormViews5", bundle: nil), forCellReuseIdentifier: "IntakeFormButtonCell5")
// Do any additional setup after loading the view.
}
我认为你的单元格没有给出标识符“IntakeFormTextFieldCell”和“IntakeFormButtonCell”,这样你的应用就会崩溃。
intakeFormTableView.register(UINib(nibName: "IntakeFormViews", bundle: nil), forCellReuseIdentifier: "IntakeFormTextFieldCell")
intakeFormTableView.register(UINib(nibName: "IntakeFormViews", bundle: nil), forCellReuseIdentifier: "IntakeFormButtonCell")
每个单元格显示都有不同的xib和swift文件,它应该用UITableViewCell覆盖