【问题标题】:iOS Universal App - Custom UITableViewCelliOS 通用应用程序 - 自定义 UITableViewCell
【发布时间】:2013-02-21 01:53:38
【问题描述】:


我正在创建一个通用的 iPhone/iPad 应用程序,我想在主视图上有自定义单元格。它适用于 iPhone,但在 iPad 上 dequeueReusableCellWithIdentifier: 返回 nil 而不是单元格。这是我的一些代码(我用普通的 UITableViewCell 替换了我的自定义单元格,因为它无论如何都不起作用):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier;

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        CellIdentifier = @"MainPadCell"; //works fine when replaced with MainPhoneCell
        __weak UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; //returns nil

        [cell.textLabel setText:@"Test"];

        return cell; //crash
    }else{
        CellIdentifier = @"MainPhoneCell";
        __weak UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        [cell.textLabel setText:[NSString stringWithFormat:@"Cell %i", indexPath.row]];

        return cell;
    }
}

奇怪的是,当我用 MainPhoneCell 替换 MainPadCell 单元格时,它会显示手机单元格(虽然我的 iPad 故事板中没有任何 MainPhoneCell 重用标识符,但我在 iPad 故事板中有 MainPadCell 并且找不到它) .
感谢您的建议!

【问题讨论】:

  • 我已经解决了问题,这段代码运行良好,感谢大家的关注和回答。
  • 检查用户在 cellForRowAtIndexPath 中是否有 iPhone 或 iPad 是一种非常低效的处理方式。每当显示单元格时,都会触发此方法。可能上千次。

标签: ios ipad uitableview ios-universal-app


【解决方案1】:

如果您为两者使用相同的控制器,则重用标识符需要相同。您可以选择在 iPad TableViewCell 中拥有更多对象(标签等),并且可以在 iPad 单元格中以不同方式布局,但子类化 TableViewCell(如果您将其子类化)和重用标识符对于 iPhone 和iPad。

确保还将单元格、单元格对象(同样,如果您正在子类化)以及 TableView 委托和数据源出口连接到您已子类化的 VC。

示例项目的链接显示如何使用相同的 sublcas 和重用 id: https://dl.dropbox.com/u/3660978/UniversalTableView.zip

【讨论】:

  • 嗨,谢谢,但重用标识符不需要相同,因为我使用 2 个不同的情节提要,我可以设置 2 个不同的重用标识符并检查我使用的是 iPad 还是 iPhone正如我正在做的那样。我终于找到了问题,它完全在别处,我上面写的代码运行良好。不过感谢您的宝贵时间!
  • 为什么要检查不同的重用标识符?您意识到,如果您在 cellForRowAtIndexPath 中执行此操作,则每次滚动并显示单元格时都会触发,对吗?我刚刚完成了一个示例项目,向您展示了我对使用相同的重用标识符的含义。我更新了答案并提供了压缩项目的链接。
  • 是的,你是对的,我只是在测试并没有意识到这一点,感谢您指出:)
  • @ElJay : 链接坏了,能不能更新一下github上的代码
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 2012-10-05
  • 2010-12-12
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多