假设我的UITableView
中有八个单元格,但我想只显示满足特定条件的单元格。我已完成this并已将numberOfRowsInSection
实施为:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
int i = 0;
for (A2OActivityCounter *ac in activityCounters) {
if(ac.startDate != nil) {
i++;
}
}
if (i == 0) {
return 1;
}
return i;
}
因此,这将完全返回符合条件的单元格数量以及我想要在tableview中使用的单元格数量。我想知道如何在tableview中实现它。例如,八个单元格中有五个符合条件,因此返回的行数将为五。但我只希望显示这五个细胞,并且在这些细胞之间没有空白细胞。所以,如果细胞是这样的:
A - satisfies the condition
B - satisfies the condition
C - **does not** satisfies the condition
D - satisfies the condition
E - **does not** satisfies the condition
F - satisfies the condition
G - **does not** satisfies the condition
H - satisfies the condition
你可能已经猜到我在桌子上只想要A,B,D,F和H,它们之间没有空单元格。如果不能在if (activityCounter.startDate != nil)
中使用cellForRowAtIndexPath
,因为如果条件不是true
,我会返回什么,该方法要求我返回(UITableViewCell *)
,所以我可以;甚至返回nil
。
有人可以帮我这个,谢谢!
答案 0 :(得分:4)
你正在以错误的方式思考这个问题。您有一组数据activityCounters
,以及要显示的数据的子集。因此,您应该有另一个实例变量,例如displayedActivityCounters
,它是当前实际显示的已过滤内容列表。
现在,您的所有表格方法仅使用displayedActivityCounters
。
当您更改过滤条件时,您会从displayedActivityCounters
生成新版activityCounters
并重新加载该表。
答案 1 :(得分:1)
为什么不在方法中枚举activityCounters数组并重新加载UITableView?例如:
@property (nonatomic, strong) NSMutableArray *filteredActivityCounters;
- (void)setupContent {
self.filteredActivityCounters = [NSMutableArray array];
for (A2OActivityCounter *ac in activityCounters) {
if(ac.startDate != nil) {
[self.filteredActivityCounters addObject:ac];
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.filteredActivityCounters.count;
}
然后你的cellForRowAtIndexPath:方法可以直接从这个过滤后的数组中拉出来:
A2OActivityCounter *ac = self.filteredActivityCounters[indexPath.row];
答案 2 :(得分:0)
您可以通过实现此tableview委托方法隐藏单元格,如下所示:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
CGFloat height = 44.0;//suupose your default hieght is 44.0
if (indexPath.row== cell c's row || indexPath.row== cell E's row || indexPath.row== cell G's row) {
height = 0.0;
}
return height;
}