我需要在tableView:cellForRowAtIndexPath中返回单元格:仅当某些条件为真时,例如:
if (condition == true)
return nil;
else
return cell;
返回nil给我一个错误。
答案 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的数据源时检查条件:)
并按条件过滤数据。