【问题标题】:Loading table view with data with 2 different prototype cells使用具有 2 个不同原型单元格的数据加载表格视图
【发布时间】:2019-05-30 02:05:56
【问题描述】:

我试图在不同的时间用不同的原型单元格填充 tableView。问题是let cell = tableView.dequeueReusableCell(withIdentifier: "MeArticlesCell") as? MeArticlesCell else {return UITableViewCell()} 之后的任何代码都没有被调用,我不知道为什么。我返回正确的行数。

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if(postsSelected){
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "messageCell") as? feedMessagesCell else {return UITableViewCell()}
        //the code in this part loads posts fine

    } else {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: "messageCell") as? feedMessagesCell else {return UITableViewCell()}
        //this part never gets called 
    }
}        

【问题讨论】:

  • 当您写//this part never gets called 时,您指的是guard let 声明?或者之后会发生什么?
  • 更正:它确实被调用,但在调用该行之后没有任何内容
  • 在 if 语句之前尝试print(postsSelected)。它很可能总是正确的,因此永远不会进入else 声明
  • 这不是我已经检查过的问题
  • 那么我们需要更多信息。只需在 else 语句中打印一些内容,就可以弄清楚“这部分永远不会被调用”。

标签: ios swift uitableview tableview


【解决方案1】:

基本上你的guard 语句失败并进入else 部分。

    guard let cell = tableView.dequeueReusableCell(withIdentifier: "messageCell") as? feedMessagesCell else { // this fails 
       // enters here
       return UITableViewCell()
       // exist the function - nothing will be run after
    }

我的猜测是它未能将它投射feedMessagesCell,因此tableView.dequeueReusableCell(withIdentifier: "messageCell") as? feedMessagesCell 使cell 为零(然后输入else 部分)

【讨论】:

  • 那部分工作它的第二个守卫让失败了
  • 尽管在您的示例中它们都是相同的。问题仍然存在:在保护语句失败后什么都不会运行,这就是它的设计目的。检查你的 init/cast 失败的地方,你很高兴
  • 我刚刚注意到,有人可能在编辑中更改了它。问题是我在代码中使用 MeArticlesCell 作为标识符,但在情节提要中使用 MeArticleCell,它有效,但现在我正在处理这些单元格大小不同的问题
【解决方案2】:

您正在使用dequeueReusableCell(withIdentifier:) 方法初始化单元格,如果它没有找到任何可重用单元格,则返回nilMore here

具有关联标识符的 UITableViewCell 对象,如果没有,则为 nil 此类对象存在于可重用单元队列中。

您应该使用dequeueReusableCell(withIdentifier:for:),如果它没有找到任何可重复使用的单元格,它会初始化一个新单元格。 More here

具有关联重用标识符的 UITableViewCell 对象。这 方法总是返回一个有效的单元格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多