0

我正在使用 Core Data 和 NSFetchedResults 控制器在我的应用程序中填充 UITableViewCell(普通样式)。TableView 有 3 个部分,每个部分都有一个 viewForHeaderInSection 和一个 viewForFooterInSection。用户将输入将放在每个部分中的项目。

当其中一个部分没有项目时,它会完全消失。我想知道是否有可能做到这一点,所以如果一个部分是空的,它会显示一个新的单元格,上面写着“没有条目”或类似的东西(可能是 UIImageView 或其他视图?),然后如果在该部分中放入了新项目,则消失。

有谁知道如何做到这一点?

这是我的数据源的代码。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [[self.fetchedResultsController sections] count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{    
   return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [[[self.fetchedResultsController sections] objectAtIndex:section] name];
}

此外,当它没有行时,该部分本身会从 TableView 中删除,那么我如何才能将“无条目”单元格添加到正确的部分?

4

2 回答 2

1

如果该部分未出现在表格视图中,则它不会从获取结果中返回,尽管您说您有 3 个部分。您可以通过以下方式手动返回:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 3;
}

然后

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{    
   if  ([[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects] == 0){     
       return 1;
   } else {
       return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
   }
}

在你cellForRowAtIndexPath:的空测试中..

if ([[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects] == 0){
cell.textLabel = @"No Entries";

}

只是一个想法。

编辑:小心,如果您尝试捕获未由 fetch 返回的索引,您的应用程序可能会崩溃。

于 2012-07-20T18:07:20.107 回答
0

您需要修改您的numberOfRowsInSection函数以检查该部分是否没有真正的行,如果是这种情况则返回 1(而不是 0)。

然后,在 中cellForRowAtIndexPath,检查您是否有该部分的数据,当您看到没有时,只需创建“无条目”单元格。

于 2012-07-20T18:06:38.343 回答