【问题标题】:Why is awakeFromNib called twice from a Cell in a TableView?为什么 awakeFromNib 从 TableView 中的单元格调用两次?
【发布时间】:2014-10-06 19:10:32
【问题描述】:

我试图理解为什么 awakeFromNib 在我的代码中被调用了两次。我目前有一个表格视图,它有一个特殊的可压缩单元格,该单元格在表格末尾出现一次。当表格视图滚动到最后的特殊单元格时,第一个 awakeFromNib 被调用(我相信这很好,因为表格视图正在重用单元格)。但是,每当我点击单元格以展开单元格时,就会再次调用 awakeFromNib。

谁能向我解释为什么 awakeFromNib 被调用了两次?我怎么只能让它被调用一次?

谢谢

编辑**人们请求的代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.section >= (NSInteger)[self.trip.destinations count]) {
        GuestCell *cell = (GuestCell*)[tableView dequeueReusableCellWithIdentifier:GuestCellIdentifier forIndexPath:indexPath];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        [cell setupCellForGuests:self.trip.guests];
        cell.guestExpanded = NO;
        NSLog(@"RETURNING CELL");
        return cell;
    }

    // For all other sections
    return [self prepareCardCellForIndexPath:indexPath forHeightCalc:NO];
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section >= (NSInteger)[self.trip.destinations count]) {
        [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }
}

【问题讨论】:

  • 如果你只实例化一个单元格,它不应该被调用两次,所以我们需要看看你在 cellForRowAtIndexPath 和 didSelectRowAtIndexPath 中有什么代码。
  • 编辑您的帖子以包含扩展单元格的代码。你如何让表格视图知道单元格应该展开?是动画吗?
  • @rdelmar 代码发布
  • 同样的问题。方法numberOfRowsInSection 根据需要调用了两次。我有 3 个部分,当应用程序加载时,此方法调用了 6 次。当然不止numberOfRowsInSection调用了两次,整个过程。

标签: ios objective-c uitableview xib


【解决方案1】:

您正在为扩展行的重新加载设置动画。表格视图通过为相同的索引路径创建另一个单元格并动画从旧单元格到新单元格的过渡来实现这一点。它会创建单元原型的第二个实例,因此第二个实例也会收到awakeFromNib 消息。如果你登录self,第二次你会看到地址不同。

我不认为你可以避免创建第二个单元格实例(因此第二个awakeFromNib),除非你摆脱动画。即使那样,我也不确定它是否会重复使用旧单元格。

【讨论】:

    【解决方案2】:

    如果带有那个笔尖的单元格在表格中只有一个,那么我的猜测是它与动画有关。我没有检查 tableview 在动画期间如何处理单元格,但是对于 tableview 标题,它要求另一个实例,然后执行动画(例如淡入淡出) - 所以旧实例淡出,新实例淡入。至少那是我如果您正确处理单元格,think 的概率最高。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多