一步一步--如何将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的主要内容,如果未能解决你的问题,请参考以下文章

我是如何将贪心算法一步一步优化到88%+59%

RecyclerView 源码学习:一步一步自定义LayoutManager

RecyclerView 源码学习:一步一步自定义LayoutManager

AngularJs + WebApi + EF + SqlServer 一步一步搭建项目

一步一步讲解如何安装Ubuntu18.04,零基础

如何用IDEA一步一步开发WebService客户端程序