Как настроить ячейку tableView, управляемой fetchedResultsController, когда tableView пуст? - PullRequest
0 голосов
/ 20 октября 2011

Привет у меня есть tableView, где fetchResultsController является источником данных.Когда объект добавляется, он добавляет его в tableView, а когда объект удаляется, tableView адаптируется соответствующим образом.Все работает отлично.Но как я могу настроить ячейку, когда tableView пуст?Допустим, клетка должна сказать «Нажмите кнопку обновления».Эта ячейка, конечно, должна исчезнуть, как только появятся объекты для отображения.

Я настроил свой tableView следующим образом:

 // Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
        return [[self.fetchedResultsController sections] count];
}

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
        id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
        return [sectionInfo numberOfObjects];
 }


 // Customize the appearance of table view cells.
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.

    [self configureCell:cell atIndexPath:indexPath];

    return cell;
 }

 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
        id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
        return [sectionInfo name];
    }

Ответы [ 2 ]

0 голосов
/ 20 октября 2011

Вы можете попробовать следующее.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
        id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];

        if ([sectionInfo numberOfObjects] == 0) {
              return 1;
        }
        return [sectionInfo numberOfObjects];
 }

 // Customize the appearance of table view cells.
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell.

    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; // get the list of items. Do it yourself

if ([sectionInfo numberOfObjects] == 0) {
    [cell.textLabel setText:@"Press the refresh button"];
}
else {
    [self configureCell:cell atIndexPath:indexPath];
}
    return cell;
 }

NSIndexPath *indexPath =  [[NSIndexPath alloc] indexPathForRow:0 inSection:0];  
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[cell.textLabel setText:@"Some Text"];  //Configure it with the first object you get

или


[listOfObjects removeAllObjects] // Remove all objects - set list count to 0.
[tableView reloadData];
0 голосов
/ 20 октября 2011

Не могли бы вы проверить, является ли ваш источник данных пустым в numberOfRowsInSection и добавлен ли в sectionInfo элемент, представляющий ячейку 'refresh', перед возвратом размера источника данных?Вам придется удалить эту ячейку, как только вы получите действительные данные, хотя /

Возможно, было бы лучше добавить подпрограмму «обновить» к вашему tableView, когда ваш dataSource пуст, и удалить его, когда он имеет> 1 элемент, хотя.

...