在TableView中有select地加载单元格
我需要返回单元格tableView:cellForRowAtIndexPath:只有当某些条件为真,例如:
if (condition == true) return nil; else return 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
不能有空格,这是不允许的,你至less必须返回一个空单元格。 你想做什么?
当TableView
尝试检索下一个单元格并获取nil时,会出现错误,无论如何,它必须获取下一个单元格。
具体取决于你打算在这里做什么,你可以在调用tableview之前不要执行条件testing:cellForRowAtIndexPath:
例如
if( someCondition ) { [self.tableview cellForRowAtIndexPath:indexPath] }
或者,如果你的出来是只显示满足一定条件的表格单元格,我build议你创build一个函数,将这些元素从你的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数据源。
你应该检查细胞的数据源设置时的条件:)
并使用条件过滤数据。