【问题标题】:How do I add custom cells for a tableView which has been added on top of a UIViewController?如何为已添加在 UIViewController 之上的 tableView 添加自定义单元格?
【发布时间】: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(),并且代码可以正常工作。

标签: ios swift


【解决方案1】:

假设你的 xib 没问题,一切正常,唯一剩下的就是注册nib

首先声明你的表格视图:

@IBOutlet weak var tableView: UITableView!

viewDidLoad()

tableView.register(UINib(nibName: "HistoryTableViewCell", bundle: nil) , forCellReuseIdentifier: "historyReuseIdentifier")

还要检查您的 tableView 的 dataSourcedelegate

【讨论】:

  • 这行得通。我可以重用 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,你能解释一下为什么错了。到目前为止,我一直在关注此代码。
      • 不,你不能,你不能从那个方法返回一个可选项。
      猜你喜欢
      • 2018-02-10
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多