来自 .xib 文件的自定义 UITableViewCell
Posted
技术标签:
【中文标题】来自 .xib 文件的自定义 UITableViewCell【英文标题】:Custom UITableViewCell from a .xib file 【发布时间】:2018-02-17 20:30:22 【问题描述】:我正在尝试使用 .xib 文件中的自定义 UITableViewCell
在我拥有 UITableView 的 ViewController 中,我已经执行了以下操作:
Ctrl + 将 tableViewDataSource 和 tableViewDelegate 拖到 Interface Builder 中的这个 View Controller。
还有这段代码:
import UIKit
class ResultsFoundViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad()
super.viewDidLoad()
self.tableView.dataSource = self;
self.tableView.delegate = self;
//Register my Custom Cell
let customCellName = String(describing: ResultsFoundTableViewCell.self);
let customCellNib = UINib.init(nibName: customCellName, bundle: nil);
self.tableView.register(customCellNib, forCellReuseIdentifier: customCellName);
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 5;
// MARK: UITableViewDataSource Functions
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "ResultsFoundTableViewCell", for: indexPath) as! ResultsFoundTableViewCell;
cell.lbStoreName.text = "Name";
return cell;
在 CustomCell 中,我只有一个标签以使其更简单:
import UIKit
class ResultsFoundTableViewCell: UITableViewCell
@IBOutlet weak var lbStoreName: UILabel!
我得到的错误是:
由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'无效的笔尖注册 对于标识符 (ResultsFoundTableViewCell) - nib 必须完全包含 一个必须是 UITableViewCell 实例的***对象'
你知道为什么会这样吗?
【问题讨论】:
【参考方案1】:这个问题的原因是你必须把你所有的UI组件放在cell->contentView里面,如果有任何元素不在里面,nib注册就会失败
也可以在没有描述的情况下进行 nib 声明
let customCellNib = UINib.init(nibName: "nibClassName", bundle: nil);
self.tableView.register(customCellNib, forCellReuseIdentifier: customCellName);
这里是String(describing
let customCellName = String(describing: ResultsFoundTableViewCell.self);
像这样 Optional("nibClassName") 为字符串内容添加可选项
【讨论】:
好的,单元格外的某个地方有一个元素,还没有看到。感谢那!关于 nib 声明:如果我不想像现在这样键入“nibClassName”并从类名中自动获取它怎么办?因此,如果我更改它或我没有正确编写它,它仍然可以工作。 在 nib name 与 class name 不同的情况下会有好处,但在大多数情况下它们是相同的,这很好以上是关于来自 .xib 文件的自定义 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
来自 XIB 的自定义 UIView 加载具有巨大规模的子视图
使用来自 XIB 的自定义 NSView/UIView 子类?
在主视图控制器的自定义单元格中使用来自 UIButton 的 IBAction