在TableView中有选择地加载单元格

时间:2011-10-04 22:43:17

标签: iphone ios uitableview cell

我需要在tableView:cellForRowAtIndexPath中返回单元格:仅当某些条件为真时,例如:

if (condition == true)
return nil;
else
return cell;

返回nil给我一个错误。

4 个答案:

答案 0 :(得分:1)

你需要做更多的事情才能在UITableView中有条件地拥有一个单元格。

假设您有3个单元格,第一个单元格是有条件的。您需要做的第一件事是根据这个条件让您的表有2个或3个单元格:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if(condition) {
        return 3;
    } else {
        return 2;
    }
}

接下来,您可以返回实际的单元格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if(condition) {
        if(indexPath.row == 0) {
            //create and return conditional cell
        } else {
            //create and return normal cell
        }
    } else {
        //create and return normal cell
    }
}

瞧!

PS :(假设所有事情都在一个部分完成。如果你需要将其分解为多个部分,我们也可以进入这个部分。)

答案 1 :(得分:0)

这是因为您的UITableView中不能有空格,这是不允许的,您必须至少返回一个空单元格。你想做什么?

TableView尝试检索下一个单元格并获得nil时,会出现错误,无论如何都必须获取下一个单元格。

答案 2 :(得分:0)

根据您打算在此处做什么,您可以在调用tableview之前执行条件测试:cellForRowAtIndexPath:

EG

if( someCondition )
{
    [self.tableview cellForRowAtIndexPath:indexPath]
}

或者如果您的出现只是显示满足特定条件的表格单元格,我建议您创建一个函数,将这些元素从tableview数据复制到NSArray中,用于显示所需/条件表数据

IE

-(void)composeVisibleTableData
{
    [m_visibleTableData removeAllObjects];
    for( NSObject* dataObject in m_tableDataArray )
    {
       if( someCondition )//dataObject meetsCondition
       {
           m_visibleTableData addObject:dataObject];
       }
    }

}

然后在您的UITableDelegate函数中为numberOfRowsInSection:和tableview:cellForRowAtIndexPath:引用m_visibleTableData作为UITableView数据源。

答案 3 :(得分:0)

您应该在设置Cell的数据源时检查条件:)

并按条件过滤数据。