我正在创建一个通用的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但它找不到它) 。
谢谢你的建议!
答案 0 :(得分:2)
如果您为两者使用相同的控制器,则重用标识符必须相同。你可以选择在iPad TableViewCell中有更多的对象(标签等),并且可以在iPad单元格中进行不同的布局,但是子类化的TableViewCell(如果你是它的子类)和重用标识符对于iPhone和iPhone都需要相同。 ipad公司
确保还将单元格,单元格对象(再次,如果您是子类)以及TableView Delegate和Datasource出口连接到已经子类化的VC。
链接到示例项目,展示如何使用相同的sublcass并重用id: https://dl.dropbox.com/u/3660978/UniversalTableView.zip