使用多级导航在UITableViewController中重用动态原型

时间:2013-06-14 06:00:47

标签: ios cocoa-touch uitableview

我正试图解决我确定的常见问题。

我有一个UITableViewController与故事板连接,并使用两个原型单元格。在导航控制器的第一个视图中,所有单元格都正确加载。尝试将该UITableViewController的另一个实例推送到导航堆栈(带有不同数据的albiet)时出现问题。

因为重用识别的单元格只与故事板中的第一个视图相关联,而不一定与类本身相关联,所以我无法重新使用这些原型单元并从{{获得可预测的nil响应1}}。

如何在堆栈中保留原型单元的使用?我唯一的解决方案就是在其中使用自定义单元格连接一个笔尖并使用它填充表格视图吗?

我的显示逻辑如下。

dequeueReusableCellWithIdentifier:

1 个答案:

答案 0 :(得分:0)

我最终做的就是我提到的我可能并在外部创建了nib并在dequeueReusableCellWithIdentifier:调用没有返回对象时加载它们。我很惊讶这个问题并不常见,我的新代码如下。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    id toDisplay = [[navPool getObjectsForParent:self.parent] objectAtIndex:indexPath.row];

    if ([toDisplay isKindOfClass:[Category class]]) {

        Category *currentCategory = toDisplay;

        static NSString *CellIdentifier = @"Category";

        CategoryCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

        cell.categoryName.text = currentCategory.name;
        [cell setCategoryId:currentCategory.categoryId];

        return cell;
    } else {
        if ([toDisplay isKindOfClass:[ListTopic class]]) {

            ListTopic *currentTopic = toDisplay;

            static NSString *CellIdentifier = @"Topic";

            ListTopicCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

            cell.textLabel.text = currentTopic.name;

            return cell;
        }
    }

    NSLog(@"Whatchu tryna pass hommie?");
    return [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Default"];
}