如何在switch部分中使用自定义类实例化UITableViewCell

时间:2014-02-17 06:54:41

标签: ios objective-c uitableview

我需要在cellForRowAtIndexPath的开头创建一个对象,用开关部分在其中添加不同的单元格:

switch (indexPath.section) {
    case DetailControllerAddressSection: {
        NSString *address = [self addressText];
        UITableViewCell *cell;
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            if (IS_OS_7_OR_LATER) {
                cell = (CustomDetailCell *) [tableView dequeueReusableCellWithIdentifier:@"AddressCell" forIndexPath:indexPath];
                cell.mainLabel.text = address;
                cell.detailLabel.text = [self distanceMessageForObjectData:self.objectData];
            } else {
                UniversalAddressCell *cell = (UniversalAddressCell *) [tableView dequeueReusableCellWithIdentifier:@"UniversalAddressCell" forIndexPath:indexPath];
                cell.backgroundView = [self cellBackgroundImageView:indexPath];
                cell.mainLabel.text = address;
...

但在这种情况下,单元格是UITableViewCell,我无法从CustomDetailCell类获取标签。怎么解决这个?我相信这个决定很简单,但我不知道如何解决它。

3 个答案:

答案 0 :(得分:1)

我猜你会做类型转换..

[(CustomDetailCell *)cell mainLabel].text = address;

答案 1 :(得分:1)

问题在于:UITableViewCell *cell;

即使您将单元格转换为(CustomDetailCell *),存储类型仍为UITableViewCell

你能做的是:

switch (indexPath.section) {
case DetailControllerAddressSection: {
    NSString *address = [self addressText];
    UITableViewCell *cell;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        if (IS_OS_7_OR_LATER) {
            CustomDetailCell *detailCell = (CustomDetailCell *) [tableView dequeueReusableCellWithIdentifier:@"AddressCell" forIndexPath:indexPath];
            detailCell.mainLabel.text = address;
            detailCell.detailLabel.text = [self distanceMessageForObjectData:self.objectData];
            cell = detailCell;

        } else {
            UniversalAddressCell *universalCell = (UniversalAddressCell *) [tableView dequeueReusableCellWithIdentifier:@"UniversalAddressCell" forIndexPath:indexPath];
            universalCell.backgroundView = [self cellBackgroundImageView:indexPath];
            universalCell.mainLabel.text = address;
            cell = universalCell;

答案 2 :(得分:1)

如果两个单元格有两个不同的NIB:

static NSString * simpleTableIdentifier = @“SimpleTableCell”;

SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
    switch (indexPath.section) {
        case DetailControllerAddressSection:
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell1" owner:self options:nil];
        cell1 = [nib objectAtIndex:0];
        // write here cell1 specific
        cell=cell1;
        break;
        case anotherCase:
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell2" owner:self options:nil];
        cell2 = [nib objectAtIndex:0];
        // write here cell2 specific
        cell=cell2;

    }
}


return cell;