如何从一个 xib 文件中注册多个 TableViewCells?
How Register Multiple TableViewCells from a xib file?
我在 Swift 4 工作,我在 UITableViewCell
遇到问题。我需要 5 种不同类型的单元格,所以我制作了一个 .xib 文件并创建了 5 个单元格。但是当使用相同的 xib 和不同的 Cell 标识符在 TableViewController class 中注册 nib 时..它崩溃了:
错误:
Terminating app due to uncaught exception
'NSInternalInconsistencyException', reason: 'invalid nib registered
for identifier (IntakeFormTextFieldCell) - nib must contain exactly
one top level object which must be a UITableViewCell instance
我的代码是:
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 文件是:
我的问题是如何使用一个 xib 文件中的不同单元格?有什么简单又好的练习方法吗?
正如崩溃所说,您必须在单元格笔尖中只有一个顶级对象,即单元格视图本身,因此从单元格内容中删除任何拖动的对象
我认为您没有提供单元格的标识符 "IntakeFormTextFieldCell" 和 "IntakeFormButtonCell",因此您的应用程序崩溃了。
intakeFormTableView.register(UINib(nibName: "IntakeFormViews", bundle: nil), forCellReuseIdentifier: "IntakeFormTextFieldCell")
intakeFormTableView.register(UINib(nibName: "IntakeFormViews", bundle: nil), forCellReuseIdentifier: "IntakeFormButtonCell")
每个单元格显示与 swift 文件有不同的 xib,应该用 UITableViewCell
覆盖
您不能在一个 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.
}
Swift 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")
}
我在 Swift 4 工作,我在 UITableViewCell
遇到问题。我需要 5 种不同类型的单元格,所以我制作了一个 .xib 文件并创建了 5 个单元格。但是当使用相同的 xib 和不同的 Cell 标识符在 TableViewController class 中注册 nib 时..它崩溃了:
错误:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'invalid nib registered for identifier (IntakeFormTextFieldCell) - nib must contain exactly one top level object which must be a UITableViewCell instance
我的代码是:
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 文件是:
我的问题是如何使用一个 xib 文件中的不同单元格?有什么简单又好的练习方法吗?
正如崩溃所说,您必须在单元格笔尖中只有一个顶级对象,即单元格视图本身,因此从单元格内容中删除任何拖动的对象
我认为您没有提供单元格的标识符 "IntakeFormTextFieldCell" 和 "IntakeFormButtonCell",因此您的应用程序崩溃了。
intakeFormTableView.register(UINib(nibName: "IntakeFormViews", bundle: nil), forCellReuseIdentifier: "IntakeFormTextFieldCell")
intakeFormTableView.register(UINib(nibName: "IntakeFormViews", bundle: nil), forCellReuseIdentifier: "IntakeFormButtonCell")
每个单元格显示与 swift 文件有不同的 xib,应该用 UITableViewCell
覆盖您不能在一个 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.
}
Swift 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")
}