iOS通用应用程序 - 自定义UITableViewCell

时间:2013-03-06 10:17:55

标签: ios ipad uitableview ios-universal-app


我正在创建一个通用的iPhone / iPad应用程序,我想在主视图上有自定义单元格。它适用于iPhone,但在iPad上dequeueReusableCellWithIdentifier:返回nil而不是cell。这是我的一些代码(我用普通的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但它找不到它) 。
谢谢你的建议!

1 个答案:

答案 0 :(得分:2)

如果您为两者使用相同的控制器,则重用标识符必须相同。你可以选择在iPad TableViewCell中有更多的对象(标签等),并且可以在iPad单元格中进行不同的布局,但是子类化的TableViewCell(如果你是它的子类)和重用标识符对于iPhone和iPhone都需要相同。 ipad公司

确保还将单元格,单元格对象(再次,如果您是子类)以及TableView Delegate和Datasource出口连接到已经子类化的VC。

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