使用具有 2 个不同原型单元格的数据加载表格视图

Posted

技术标签:

【中文标题】使用具有 2 个不同原型单元格的数据加载表格视图【英文标题】:Loading table view with data with 2 different prototype cells 【发布时间】: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 语句中打印一些内容,就可以弄清楚“这部分永远不会被调用”。 【参考方案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:) 方法初始化单元格,如果它没有找到任何可重用单元格,则返回nil。 More here

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

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

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

【讨论】:

以上是关于使用具有 2 个不同原型单元格的数据加载表格视图的主要内容,如果未能解决你的问题,请参考以下文章

仅针对一种原型单元格的自动表格视图单元格高度

我想使用带有多个单元格的表格视图,一个单元格有多个列,2 个单元格只有一列

我想在单个表格视图中使用来自 nib 的两个不同的自定义单元格。两个原型电池具有不同的高度

IOS 故事板 - 显示选择表格单元格的不同视图

使用 plist 加载 UITableView 的内容

使用 Swift 在表格视图中重新加载单元格数据