2010-03-22 4 views
7

У меня есть UITableViewController, который заполнен некоторыми данными. Если данные возвращаются пустыми, очевидно, что таблица пуста. Каков подходящий метод для использования этого случая, и выведите что-то вроде UILabel с «Нет данных».Обработка пустого UITableView в UITableViewController

Я использовал - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section, но это оказалось немного громоздким, и я не уверен, что это лучшее место для этого.

ответ

1

Я просто скрыл табличное представление, когда вместо этого не было данных. Просто подкласс UITableView и переопределить reloadData. Вы также можете показать/скрыть текстовую метку соответствующим образом, чтобы не отображать данные.

- (void)reloadData { 
    [super reloadData]; 
    BOOL dataPresent = FALSE; 
    int sections = [self.dataSource respondsToSelector:@selector(numberOfSectionsInTableView:)] ? [self.dataSource numberOfSectionsInTableView:self] : 1; 
    for (int i = 0; i < sections; i++) { 
     if ([self.dataSource tableView:self numberOfRowsInSection:i] > 0) { 
      dataPresent = TRUE; 
      break; 
     } 
    } 
    self.hidden = !dataPresent; 
    return; 
} 
5

Я бы, вероятно, немного изменил философию, чтобы показать только UITableView, когда контент доступен, и пусть UIView покажет ваше свободное изображение без контента, пока контент не будет готов.

После того, как контент был выбран и готов к представлению - анимируйте или создайте UITableView в иерархии представления над изображением «без содержимого» и попросите перезагрузить его данные. Это заставит его начать работу через обратные вызовы делегатов datasource.

По крайней мере, таким образом вам не придется беспокоиться о показе табличного представления без данных и о смешении с методами обратного вызова UITableViewDataSource.

+0

Мне это нравится. Поэтому я начал с приложения на основе навигации и получил UITableViewController. Так что, если я скрою tableView, как мне добавить вещи в представление и что такое представление под ним? Когда я открываю InterfaceBuilder, я вижу только представление таблицы. Меня это смущает. – Ternary

1

Почему бы просто не изменить свойство backgroundView UITableView на что-то подходящее, когда таблица пуста? Вы можете обновить свойство backgroundView при загрузке или перезагрузке данных для вашего TableView. Фоновый экран автоматически настраивается на размер вашего TableView, и вы можете настроить его, чтобы иметь любые изображения, текст и элементы управления, которые вы хотите для пустого случая.

Смежные вопросы