【发布时间】:2011-12-01 01:50:24
【问题描述】:
我需要在tableView中返回单元格:cellForRowAtIndexPath:仅当某些条件为真时,例如:
if (condition == true)
return nil;
else
return cell;
返回 nil 给我一个错误。
【问题讨论】:
标签: iphone ios uitableview cell
我需要在tableView中返回单元格:cellForRowAtIndexPath:仅当某些条件为真时,例如:
if (condition == true)
return nil;
else
return cell;
返回 nil 给我一个错误。
【问题讨论】:
标签: iphone ios uitableview cell
您需要做更多工作才能有条件地在 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:(这是假设所有内容都在一个部分中完成。如果您需要将其分成多个部分,我们也可以进入)。
【讨论】:
这是因为您的UITableView 中不能有空格,这是不允许的,您至少必须返回一个空单元格。你想做什么?
当TableView 尝试检索下一个单元格并获得 nil 时出现错误,无论如何它都必须获取下一个单元格。
【讨论】:
根据您打算在这里做什么,您是否可以在调用 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];
}
}
}
然后在 numberOfRowsInSection: 和 tableview:cellForRowAtIndexPath: 的 UITableDelegate 函数中引用 m_visibleTableData 作为 UITableView 数据源。
【讨论】:
您应该在设置 Cell 的数据源时检查条件:)
并根据条件过滤您的数据。
【讨论】: