UITableView 和自定义 UITableViewCell 使用 .xib

Posted

技术标签:

【中文标题】UITableView 和自定义 UITableViewCell 使用 .xib【英文标题】:UITableView and custom UITableViewCell using .xib 【发布时间】:2017-04-01 08:23:52 【问题描述】:

在我的应用程序中,我使用了一个使用 xib 文件的自定义 tableView 单元。我创建了 .xib 文件出口标签等到我的 TableViewCell 类

在我的 ViewController 中,我用来在表格视图中填充和显示单元格的代码如下:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let transaction = statementArray[indexPath.row]
    let cell = Bundle.main.loadNibNamed("StatementCell", owner: self, options: nil)?.first as! StatementCell



    cell.transAmount.text = String(transaction.transAmount)
    cell.transDesc.text = transaction.transDesc
    cell.transFees.text = String(transaction.transFees)

    return cell

我知道 TableView 的工作方式是重用屏幕外的单元格。他们是我加载.xib并正确填充单元格的方式吗?还是我必须在我的代码中添加一些东西?

【问题讨论】:

使用 .xib 是否有特定原因?您可以在 Interface Builder 的同一个表格视图中创建多个单元格。 我使用的是 .xib,因为我将根据我拥有的数据使用不同的单元格 问题出在哪里?您可以在同一个表格视图中使用不同的 UI 元素、大小等创建任意数量的单元格。只需将单元格拖到表格视图中并分配一个标识符和(可选)一个类。这比使用额外的 .xib 方便得多。 @vadian 可能是 Xib 对于在多个 tableViews 中重用单元格更方便? @UmairAfzal 是的,在这种情况下,XIB 更方便,但问题似乎与多个表视图无关。 【参考方案1】:

首先你需要用 UITableView 注册你的自定义单元格

yourTableView.register(UINib(nibName: "StatementCell", bundle: nil), forCellReuseIdentifier: "cellIdentifier")

那么在UITableView的Delegate方法cellForRowAt中你需要写

let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: indexPath) as! StatementCell
cell.textLabel?.text = "Sample Project"
return cell

现在您可以使用 cell.propertyName 访问您的 UITableViewCell 属性

您必须注意“cellIdentifier”和“forCellReuseIdentifier”的值必须相同。

【讨论】:

【参考方案2】:

还有一件事是您需要在viewDidLoad 方法中注册您的类以重用标识符。

YourTable.registerclass(tablecell, forCellReuseIdentifier: "identifier"

并确保您已连接所有必需的插座。

【讨论】:

那么这行代码基本上就是注册自定义cell类,以便复用cell? 是的,在我的代码中我也使用了....在应用它之前我遇到了几次崩溃,并且在使用它之后工作正常......【参考方案3】:

首先在表格视图中注册自定义单元格 nibCalss

let str1 : NSString = "StatementCell"

tableView.register(UINib(nibName: "StatementCell", bundle: nil), forCellReuseIdentifier: str1 as String)

现在初始化tableviewcell

let cell1:StatementCell = tableView.dequeueReusableCell(withIdentifier: str1 as String) as! StatementCell!

现在访问 tableviewcell 插座集合。

【讨论】:

以上是关于UITableView 和自定义 UITableViewCell 使用 .xib的主要内容,如果未能解决你的问题,请参考以下文章

UIRefreshControl 带有两个异步 json 下载来填充 UITableView 行和自定义标题视图

在普通样式的 UITableView 中更改自定义 UITableViewCell 单元格的背景颜色

更改 uitableview 单元格删除按钮背景颜色

从两个 NSArrays 中包含的数据准备一个 NSDictionary 用于 UITableView

UICollectionView/UITableView 通用应用

如何在 Storyboard 中的自定义 UITableViewCell 中配置 UITableView?