无法使用自定义单元格

时间:2011-04-12 12:54:08

标签: iphone uitableview

我无法弄清楚这段代码的错误我所要做的就是当设备处于纵向模式时使用自定义表格单元格'AlertCell',如果设备处于“横向”模式则使用“AlertCellLandScape”。

它的说法是未宣布的,并在条件内检查其说未使用的单元格

static NSString *CellIdentifier1 = @"Cell1";
static NSString *CellIdentifier2 = @"Cell2";
UITableViewCell *cell;

if (isPortraitMode) 
{
    AlertsTableCell *cell = (AlertsTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
}

else {
    AlertsTableCellLandScape *cell = (AlertsTableCellLandScape *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
}






if (cell == nil) {
   // cell = [[[AlertsTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    if (isPortraitMode) {
        cell = [[[AlertsTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1] autorelease];
    }
    else {
        cell = [[[AlertsTableCellLandScape alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier2] autorelease];
    }
}

请对此有所了解。

提前致谢

3 个答案:

答案 0 :(得分:2)

你可以这样做,你有关于你如何声明单元格类型的问题,但这应该有效,除非你在if-else纵向块之外访问单元格引用。

static NSString *CellIdentifier1 = @"Cell1";
static NSString *CellIdentifier2 = @"Cell2";

if (isPortraitMode) {
    AlertsTableCell *cell = (AlertsTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1];

    if (cell == nil) {
        cell = [[[AlertsTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1] autorelease];
    }

    return cell;

} else {
    AlertsTableCellLandScape *cell = (AlertsTableCellLandScape *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2];

    if (cell == nil) {
        cell = [[[AlertsTableCellLandScape alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier2] autorelease];
    }

    return cell;
}

答案 1 :(得分:1)

您有范围问题。你在if / else中声明了单元格,所以它不存在于它们之外。

在if / else之前声明单元格,然后将其分配到内部。

答案 2 :(得分:0)

请务必在xcode中为其指定正确的标识符:

if (isPortraitMode) 
{
    AlertsTableCell *cell = (AlertsTableCell *)[tableView dequeueReusableCellWithIdentifier:@"AlertCell"];
}

else {
    AlertsTableCellLandScape *cell = (AlertsTableCellLandScape *)[tableView dequeueReusableCellWithIdentifier:@"AlertCellLandScape"];
}

并在IB中为各个单元格正确设置(填充标识符字段)