如何为已添加在 UIViewController 之上的 tableView 添加自定义单元格?
Posted
技术标签:
【中文标题】如何为已添加在 UIViewController 之上的 tableView 添加自定义单元格?【英文标题】:How do I add custom cells for a tableView which has been added on top of a UIViewController? 【发布时间】:2019-08-02 11:48:28 【问题描述】:我在一个普通的 UIViewController 类上使用了一个 tableView (myTableView)。我希望在这个 tableView 中使用可重复使用的单元格来节省内存。我没有创建单独的 XIB 并将 tableView 组件拖放到 viewController 上。
单元格已使用 UITableViewCell 类型的新类 HistoryTableViewCell 创建,并且该类也具有 XIB。
我还创建了一个 tableViewCell 及其 XIB,并在 tableView(_,cellForRowAt:)
方法中使用了以下代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "historyReuseIdentifier", for: indexPath) as! HistoryTableViewCell
cell.meetingDateLabel.text = historyArray![indexPath.section]
return cell
当我在viewDidLoad()
方法中添加以下行时,这行代码可以很好地与 tableViewController 一起使用:
tableView.register(UINib(nibName: "TableViewCell", bundle: nil), forCellReuseIdentifier: "reuseIdentifier")
但tableView.register
属性不能与 tableView 一起使用。我如何利用这里的可重复使用的细胞?
【问题讨论】:
提问时请多加努力。不,这不适用于视图控制器或表格视图控制器。您的标识符不匹配。回答你的问题;与使用表格视图控制器的方式完全相同。 我认为你使用了不同的 reusableIdentifier.register 和 dequeable cell 有不同的标识符名称 如果您只有一个表格视图,请删除 XIB 并在 Interface Builder 的表格视图中设计 所有 单元格 @Desdenova 感谢您的建议,问题已更新。我找到了问题的答案。必须使用 _mytableView.register() 而不是使用 tableView.register(),并且代码可以正常工作。 【参考方案1】:假设你的 xib 没问题,一切正常,唯一剩下的就是注册nib
。
首先声明你的表格视图:
@IBOutlet weak var tableView: UITableView!
在viewDidLoad()
:
tableView.register(UINib(nibName: "HistoryTableViewCell", bundle: nil) , forCellReuseIdentifier: "historyReuseIdentifier")
还要检查您的 tableView 的 dataSource
和 delegate
。
【讨论】:
这行得通。我可以重用 tableView 中的单元格。此外,您可以将名称从 tableView 更改为任何其他名称(例如:myTableView),并且可以直接访问属性...... myTableView.register(UINib(nibName: "HistoryTableViewCell", bundle: nil ) , forCellReuseIdentifier: "historyReuseIdentifier"))【参考方案2】:答案其实很简单。在阅读了其他一些答案后,我想通了。
我只需要替换这一行:
tableView.register(UINib(nibName: "TableViewCell", bundle: nil), forCellReuseIdentifier: "reuseIdentifier")
用这个:
UITableView.register(UINib(nibName: "TableViewCell", bundle: nil), forCellReuseIdentifier: "reuseIdentifier")
由于没有名为tableView的表格视图,你需要访问UITableView类。
【讨论】:
【参考方案3】:你想重用单元格没关系,要使用它们你需要先注册它..假设你在一个 ViewController 中有多个 tableView,那么你必须用各自的 tableView 注册每个单元格。 只需将 tableViewCell 注册到相应的 tableView 并使用您在注册 tabelViewcell 时使用的 reusableIdentifier。
【讨论】:
【参考方案4】:尝试像这样直接在cellForRowAt indexPath:
中创建它。这里不需要tableView.register(UINib(nibName: "TableViewCell", ...
行。
//And replace names with your names
var cell = tableView.dequeueReusableCell(withIdentifier:"cell") as? TableViewCell
if cell == nil
cell = Bundle.main.loadNibNamed("TableViewCell",owner: self, options: nil)?.first as? TableViewCell
【讨论】:
@Desdenova,你能解释一下为什么错了。到目前为止,我一直在关注此代码。 不,你不能,你不能从那个方法返回一个可选项。以上是关于如何为已添加在 UIViewController 之上的 tableView 添加自定义单元格?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 UIViewController 的第一个视图提供带有乘数的垂直间距
如何为我在 Swift 中以编程方式创建的 UIViewController 子类创建 init?
如何为 UIViewController.view 中也具有 UITapGestureRecognizer 的 UIView 挑选和操作 UITapGestureRecognizer?