0

我只是尝试为 iPhone 和 iPad 创建一个应用程序。为此,我创建了一个表格视图,该表格视图创建的单元格期望应用程序加载时将收到的 json。方法内部

tableView:cellForRowAtIndexPath:

我启动将用于 iPhone 的单元格,并从 json 中设置特定值。我使用的单元格是我使用新对象和 NIB 文件创建的自定义单元格。代码如下所示:

static NSString *CellIdentifier = @"tvChannelIdentifier";

tvChannelCell *cell = (tvChannelCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"tvChannelCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}
....

现在我尝试让该应用程序也可以在 iPad 上运行,我创建了一个新的自定义单元格,还包含一个新对象和一个 NIB 文件。变量的名称与 customIPhoneCell 中的名称相同,因此我不必更改整个代码。我刚刚在 tableView:cellForRowAtIndexPath: 中插入了一个开关,以便显示正确的单元格,但代码无法访问它:

static NSString *CellIdentifier = @"tvChannelCell";
static NSString *IPadCellIdentifier = @"tvChannelIPadCell";


//determination which device ---> choose cell
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
    tvChannelCell *cell = (tvChannelCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

}else{

    tvChannelIPadCell = (tvChannelIPadCell *) [tableView dequeueReusableCellWithIdentifier:IPadCellIdentifier];
}

我试图在类的顶部定义单元格对象,但是我不能使用相同的变量名。我还尝试选择 iPad 的 NIB 文件来检查它是否会显示,但没有任何反应。我试图在顶部设置一个 UITableviewcell,

UITableViewCell *cell

并在 cellForRowAtIndexPath 中的开关内设置特定的单元格类型,但随后无法访问变量。

所以我的问题是,是否可以在 tableview 方法中进行此切换,或者我是否必须为每个单元格类型都有自己的变量名的每个设备编写几个部分?

4

3 回答 3

2

我所做的:

只创建了一个带有 2 个 xibs 的 UITableViewCell 子类,一个用于 iPad 的 xib,另一个用于 iPhone。

tvChannelCell *cell = (tvChannelCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
NSArray *nib;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){

     nib = [[NSBundle mainBundle] loadNibNamed:@"tvChannelCell_iPhone" owner:self options:nil];

}else{

    nib = [[NSBundle mainBundle] loadNibNamed:@"tvChannelCell_iPad" owner:self options:nil];
}

    cell = [nib objectAtIndex:0];
}
于 2013-04-19T13:45:27.360 回答
1

这很简单,为什么不为 iPad 创建另一个 nib,并在设备是 iPad 时访问它。

你所有的代码都将保持不变,即你不需要像任何地方一样比较 iPad

喜欢:

if (cell == nil) {
    NSArray *nib;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
     nib = [[NSBundle mainBundle] loadNibNamed:@"tvChannelCell-iPad" owner:self options:nil];}
    else{
    nib = [[NSBundle mainBundle] loadNibNamed:@"tvChannelCell" owner:self options:nil];}
    cell = [nib objectAtIndex:0];
}
于 2013-04-19T13:40:19.557 回答
1

这行代码对区分 iphone 和 ipad 很有用,

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        tvChannelCell *cell = (tvChannelCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    }else{

        cell = (tvChannelIPadCell *) [tableView dequeueReusableCellWithIdentifier:IPadCellIdentifier];

     }
于 2013-04-19T13:40:28.900 回答