Текст-заполнитель для табличного представления, если источник данных пуст - PullRequest
4 голосов
/ 08 марта 2011

Я хочу показать пользователю текст, чтобы сообщить, что в источнике данных нет содержимого. Например, вы можете увидеть такое поведение в приложении контактов, если у вас нет контактов, оно говорит об этом в середине таблицы серым текстом. Есть ли простой способ сделать это или мне нужно использовать какой-то трюк, как создание пустых ячеек или что-то .. Спасибо!

Ответы [ 5 ]

8 голосов
/ 08 марта 2011

Нет (AFAIK) какого-либо встроенного способа отображения таблицы в пустом виде. Вы можете получить tableView:numberOfRowsInSection: return 1, если источник данных пуст, а tableView:cellForRowAtIndexPath: вернуть пустую ячейку, говорящую об отсутствии данных Или вы можете просто добавить собственное представление для отображения соответствующего сообщения, полностью игнорируя (пустое) представление таблицы.

7 голосов
/ 26 марта 2014

Вот краткое и приятное решение.

Первый шаг в инициализации UITableViewController:

UILabel *placeholder = [[UILabel alloc] init];
placeholder.font = [placeholder.font fontWithSize:20];
placeholder.numberOfLines = 0; // Use as many lines as needed.
placeholder.text = NSLocalizedString(@"Your text here", nil);
placeholder.textAlignment = NSTextAlignmentCenter;
placeholder.textColor = [UIColor lightGrayColor];

placeholder.hidden = YES; // Initially hidden.
[self.tableView addSubview:placeholder];

self.placeholder = placeholder; // You'll need a reference to the placeholder.

Второй шаг в UITableViewController:

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    self.placeholder.frame = self.tableView.bounds;
}

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

Лучшим решением было бы не использовать UITableViewController.Просто добавьте tableView в UIViewController и добавьте представление заполнителя в UIViewController над tableView.Используйте автоматическое расположение, чтобы заполнитель был отцентрирован по вертикали и горизонтали.Наконец, покажите / скройте заполнитель при необходимости.

Что вы, ребята, думаете об этом решении?Пожалуйста, прокомментируйте.

4 голосов
/ 14 января 2016

In Swift 2.0

чуть ниже календаря, у меня есть табличное представление

disregard the calendar

func TabelaSemDados(Array:NSArray){
    if Array.count == 0 {
        tableView.tableFooterView = UIView(frame: CGRect.zero)
        tableView.backgroundColor = UIColor.clearColor()

        var label = UILabel()
        label.frame.size.height = 42
        label.frame.size.width = tableView.frame.size.width
        label.center = tableView.center
        label.center.y = (tableView.frame.size.height/2)
        label.numberOfLines = 2
        label.textColor = UIColor.grayColor()
        label.text = "No Data Text"
        label.textAlignment = .Center
        label.tag = 1

        self.tableView.addSubview(label)
    }else{
        self.tableView.viewWithTag(1)?.removeFromSuperview()
    }
}

называется viewdidapper:

override func viewDidAppear(animated: Bool) {
    TabelaSemDados(self.Agenda)
}
1 голос
/ 11 мая 2013

Я написал три разных подхода в моем блоге :

  • , которые идут с простым решением, описанным Anomie: используйте условные выражения в ваших методах источника данных.используйте «волшебную» категорию дел для всего UITableView + NXEmptyView .
  • используйте отдельный класс источника данных для особых случаев (пустой, загрузка,…).
0 голосов
/ 18 августа 2017

Пожалуйста, посмотрите здесь

Я могу предложить обратить ваше внимание на DZNEmptyDataSet , StatefulViewController , UIEmptyState и StatusProvider

Но эти либы большие, и в большинстве случаев вы можете использовать @ Pablo Ruan ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...