我在Swift 4工作,我在[
%{id: 1, title: "AAA", user_name: "John", tags: [%{name: "elixir"},...]},
%{id: 2, title: "BBB", user_name: "Mike", tags: [%{name: "erlang"},...]},
...
]
面临问题。我需要5种不同类型的单元格,所以我创建了一个.xib文件并创建了5个单元格。但是当在TableViewController类中使用相同的xib和不同的Cell标识符注册nib时,它崩溃了:
错误:
由于未捕获的异常而终止应用 'NSInternalInconsistencyException',原因:'无效的nib已注册 对于标识符(IntakeFormTextFieldCell) - nib必须完全包含 一个顶级对象,必须是UITableViewCell实例
我的代码是:
UITableViewCell
我的问题是如何在一个xib文件中使用不同的单元格?这有什么简单而好的练习方法吗?
答案 0 :(得分:4)
您无法在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.
}
答案 1 :(得分:0)
答案 2 :(得分:0)
我认为你没有给出标识符" IntakeFormTextFieldCell"和" IntakeFormButtonCell"您的单元格,以便您的应用程序崩溃。
intakeFormTableView.register(UINib(nibName: "IntakeFormViews", bundle: nil), forCellReuseIdentifier: "IntakeFormTextFieldCell")
intakeFormTableView.register(UINib(nibName: "IntakeFormViews", bundle: nil), forCellReuseIdentifier: "IntakeFormButtonCell")
每个单元格显示都有不同的xib和swift文件,应该用UITableViewCell覆盖
答案 3 :(得分:0)
斯威夫特 5
override func viewDidLoad() {
super.viewDidLoad()
// Register nib.
self.tableView.register(UINib(nibName: "Nib1", bundle: nil), forCellReuseIdentifier: "Nib1_name_cell")
self.tableView.register(UINib(nibName: "Nib2", bundle: nil), forCellReuseIdentifier: "Nib2_name_cell")
}