如何为 table 视图单元格制作和使用 XIB 文件,而不是仅仅使用故事板中的 table 视图单元格 "in"?
How do you make and use an XIB file for a table view cell, rather than just using a cell "in" the table view in storyboard?
在普通故事板中,table 次浏览来自 "with" 个嵌入式单元格。只需将 "Dynamic Prototypes" 设置为 1(或更多):
然后您只需使用
在您的视图控制器中使用这些单元格
...cellForRowAt
let cell = tableView.dequeueReusableCell(
withIdentifier:"YourCellClassID", for: indexPath) as! YourCellClass
其中YourCellClass
是table视图单元格的class,
而字符串 "YourCellClassID" 就是
"Identifier" 设置在故事板的 Attributes Inspector(现在是**第 5 个 按钮)**。
(注意不要在 第 4 个 按钮上使用 "restoration identifier",identity inspector,这听起来相同但无关。)
但是如果您想使用 XIB 文件怎么办?
故事板中的 table 视图不是使用原型之一 "in" 吗?
如果您使用 XIB 文件,则可以在不同的 table 中使用 相同的单元格 。
怎么做?
第 1 步,制作单元格样式的 XIB 文件
当前 (2020) Xcode 没有直接按钮来创建 table view cell 样式的 XIB 文件。
秘密是
创建一个'Cocoa Touch Class'、select UITableViewCell
还有select'create XIB file'
您现在有一个单元格样式的 XIB 文件,示例中 TesteCell.xib。
(如果不需要TesteCell.swift,请随意删除。)
第2步,在viewDidLoad
中添加register#UINib
代码
如果你现在试试这个:
let cell = tableView.dequeueReusableCell(
withIdentifier: "TesteCellID",
for: indexPath) as! TesteCell
事实上它不起作用。
在viewDidLoad
中,必须加上
override func viewDidLoad() {
super.viewDidLoad()
// We will be using an XIB file, rather than
// just a cell "in" the table view on storyboard
tableView.register(
UINib(nibName: "filename without suffix", bundle: nil),
forCellReuseIdentifier: "identifier in attributes inspector"
)
}
在例子中
override func viewDidLoad() {
super.viewDidLoad()
// We will be using an XIB file...
tableView.register(
UINib(nibName: "TesteCell", bundle: nil),
forCellReuseIdentifier: "TesteCellID")
}
你就是这样做的。
总结
新文件 - cocoa touch class - table 单元格的 subclass - do select 'also create XIB file'
在viewDidLoaed中,使用
注册XIB文件
文件名(无后缀)和标识符
大功告成,现在可以正常引用dequeueReusableCell
中的单元格了
在普通故事板中,table 次浏览来自 "with" 个嵌入式单元格。只需将 "Dynamic Prototypes" 设置为 1(或更多):
然后您只需使用
在您的视图控制器中使用这些单元格...cellForRowAt
let cell = tableView.dequeueReusableCell(
withIdentifier:"YourCellClassID", for: indexPath) as! YourCellClass
其中YourCellClass
是table视图单元格的class,
而字符串 "YourCellClassID" 就是
"Identifier" 设置在故事板的 Attributes Inspector(现在是**第 5 个 按钮)**。
(注意不要在 第 4 个 按钮上使用 "restoration identifier",identity inspector,这听起来相同但无关。)
但是如果您想使用 XIB 文件怎么办?
故事板中的 table 视图不是使用原型之一 "in" 吗?
如果您使用 XIB 文件,则可以在不同的 table 中使用 相同的单元格 。
怎么做?
第 1 步,制作单元格样式的 XIB 文件
当前 (2020) Xcode 没有直接按钮来创建 table view cell 样式的 XIB 文件。
秘密是
创建一个'Cocoa Touch Class'、select UITableViewCell
还有select'create XIB file'
您现在有一个单元格样式的 XIB 文件,示例中 TesteCell.xib。
(如果不需要TesteCell.swift,请随意删除。)
第2步,在viewDidLoad
中添加register#UINib
代码
如果你现在试试这个:
let cell = tableView.dequeueReusableCell(
withIdentifier: "TesteCellID",
for: indexPath) as! TesteCell
事实上它不起作用。
在viewDidLoad
中,必须加上
override func viewDidLoad() {
super.viewDidLoad()
// We will be using an XIB file, rather than
// just a cell "in" the table view on storyboard
tableView.register(
UINib(nibName: "filename without suffix", bundle: nil),
forCellReuseIdentifier: "identifier in attributes inspector"
)
}
在例子中
override func viewDidLoad() {
super.viewDidLoad()
// We will be using an XIB file...
tableView.register(
UINib(nibName: "TesteCell", bundle: nil),
forCellReuseIdentifier: "TesteCellID")
}
你就是这样做的。
总结
新文件 - cocoa touch class - table 单元格的 subclass - do select 'also create XIB file'
在viewDidLoaed中,使用
注册XIB文件文件名(无后缀)和标识符
大功告成,现在可以正常引用
中的单元格了dequeueReusableCell