0


我正在创建一个通用的 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 并且找不到它)。
感谢您的任何建议!

4

1 回答 1

2

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

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

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

于 2013-03-06T10:49:56.023 回答