一步一步--如何将tableview添加到nib
Posted
技术标签:
【中文标题】一步一步--如何将tableview添加到nib【英文标题】:Step by step--how to add tableview to nib 【发布时间】:2015-09-09 12:32:17 【问题描述】:我第一次使用 nib 文件并尝试添加一个带有 tableview 单元格的 tableview。我创建了一个 UIView 控制器类型的 nib 文件,然后将 tableview 拖到视图上,并在 viewcontroller.swift 中添加了所有必要的委托、数据源、cellForRowatIndexPath、numberOfRowsinSection 等,就像平常一样。但是应用程序在加载时崩溃。我查看了其他几个问题,尤其是这些:
Custom UITableViewCell from nib in Swift
Can't make UiTableView work
但是这些解决方案对我完全不起作用,并且在加载时仍然崩溃。我得到的另一个错误消息是“这个类不符合键值。”
那么,在 nib 文件中制作 uitableview 的具体步骤是什么?据我了解:
文件-->新建-->文件-->Cocoa Touch 类-->子类 UITableViewController。这设置了表格视图。我们称之为 View1.swift
文件-->新建-->文件-->Cocoa Touch 类-->子类 UITableViewCell。这会在表格视图中设置单元格。我们称之为 View1TableCell.swift
在 View1.swift 中,注册 nib:
tableView.registerNib(UINib(nibName: "View1", bundle: nil), forCellReuseIdentifier: "View1CellID")
给单元格一个重用标识符。我们会说这是“View1CellID”
在 View1.swift 中的 cellforRowAtIndexPath 中,使用正确的单元格标识符使单元格出列。
所以,所有这些步骤都应该有效,以便我可以将任何标签或按钮添加到我的 View1TableCell 笔尖,并且当我构建和运行时,这些更改将在 tableview 上看到,对吗?我做错了什么?
【问题讨论】:
添加一个所有异常断点,并告诉我们哪里出错了。 当前错误在单元格的出列处(在 cellforRowatIndexPath 中),错误内容为:“此类与键视图的键值编码不兼容。” 您使用的是 Storyboard 还是 Xibs? 你的 View1 类是否扩展了 UITableView 单元格? 我正在使用 Xibs。你是什么意思扩展 UItableview 单元格?我以前从未与 Xibs 合作过,所以我不太清楚你的意思。 【参考方案1】:您注册的笔尖应该是包含单元格的笔尖,而不是视图控制器。来自 Apple 文档:
参数
一个 nib 对象,它指定要使用的 nib 文件 创建单元格。此参数不能为 nil。
【讨论】:
这有帮助。我更改了它,现在我没有收到任何错误并且 tableview 加载,但我的自定义单元格没有出现,它只是一个空白的 tableview。cellforRowAtIndexPath
是否真的被调用(设置断点)?如果是这样,那里的代码是什么样的?【参考方案2】:
因此,根据您的解释,保存您的表格的视图是 View1。
如果你想实现一个自定义单元格,你需要创建一个新的类,来扩展 UITableViewCell。该类也应该有一个笔尖
所以新建一个类
类 MyCell: UITableViewCell
override func awakeFromNib()
super.awakeFromNib()
setupCell()
func setupCell()
//setup your ui here
现在在 View1.swift 中,在 viewDidLoad 中,注册 nib
func viewDidLoad()
super.viewDidLoad()
//register the nib of the cell for your cell
tableView.registerNib(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "MyCellIdentifier")
现在使用表格视图中的单元格
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("MyCellIdentifier") as! MyCell
//set the stuff you need in your cell
return cell
【讨论】:
以上是关于一步一步--如何将tableview添加到nib的主要内容,如果未能解决你的问题,请参考以下文章
RecyclerView 源码学习:一步一步自定义LayoutManager
RecyclerView 源码学习:一步一步自定义LayoutManager