У меня есть tableview
, где иногда может не быть результатов для перечисления, поэтому я хотел бы разместить что-то, что говорит «нет результатов», если нет результатов (либо метка, либо одна ячейка представления таблицы?).
Есть ли самый простой способ сделать это?
Я бы попробовать label
за tableview
то спрятать один из двух на основе результатов, но так как я работаю с TableViewController
и не нормальный , ViewController
я не знаю , как умный или выполнимо , что есть.
Я также использую Parse
и подклассифицирую как PFQueryTableViewController
:
@interface TableViewController : PFQueryTableViewController
Я могу предоставить любую дополнительную информацию, просто дайте мне знать!
TableViewController
Сцена в раскадровке:
РЕДАКТИРОВАТЬ: Per Midhun MP, вот код, который я использую
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
NSInteger numOfSections = 0;
if ([self.stringArray count] > 0)
{
self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
numOfSections = 1;
//yourTableView.backgroundView = nil;
self.tableView.backgroundView = nil;
}
else
{
UILabel *noDataLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height)];
noDataLabel.text = @"No data available";
noDataLabel.textColor = [UIColor blackColor];
noDataLabel.textAlignment = NSTextAlignmentCenter;
//yourTableView.backgroundView = noDataLabel;
//yourTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.backgroundView = noDataLabel;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}
return numOfSections;
}
И вот вид, который я получаю, в нем все еще есть разделительные линии. У меня такое ощущение, что это небольшое изменение, но я не уверен, почему появляются разделительные линии?
numberOfSections
должен вернуть счет, и все. То же самое дляnumberOfRowsInSection
. Их можно вызывать много раз в любое время. Никогда не обновляйте представления, не обновляйте данные и не делайте ничего, кроме возврата счетчика. Логика обновления представлений никогда не должна быть в этих методах.Ответы:
Вы можете легко добиться этого, используя
backgroundView
свойствоUITableView
.Цель C:
Swift:
Ссылка Ссылка на класс UITableView
источник
tableView
розетка, чтобы я мог делать этоyourTableView.backgroundView
? Я использую,TableViewController
поэтому у меня сейчас нет выхода для него, вот почему мне интересно.UITableViewController
уже есть свойство с именем,tableView
поэтому вам не нужно его создаватьself.tableView
numberOfSections
должен вернуть счет, и все. То же самое дляnumberOfRowsInSection
. Их можно вызывать много раз в любое время. Никогда не обновляйте представления, не обновляйте данные и не делайте ничего, кроме возврата счетчика. Логика обновления представлений никогда не должна быть в этих методах.Для Xcode 8.3.2 - Swift 3.1
Вот не очень известный, но невероятно простой способ добавления представления «Без элементов» к представлению пустой таблицы, которое восходит к Xcode 7. Я оставлю его вам управлять той логикой, которая добавляет / удаляет в фоновое представление таблицы, но вот последовательность действий для раскадровки и Xcode (8.3.2):
В конечном итоге это работает в любое время, когда вы хотите добавить простое представление к своему контроллеру представления, которое не обязательно должно отображаться немедленно, но которое вы также не хотите передавать код.
источник
Быстрая версия приведенного выше кода: -
Но если вы загружаете информацию из JSON, вам нужно проверить, является ли JSON пустым или нет, поэтому, если вы поместите такой код, он сначала покажет сообщение «Нет данных», а затем исчезнет. Потому что после перезагрузки таблицы данные скрываются. Таким образом, вы можете поместить этот код в место загрузки данных JSON в массив. ТАК :-
источник
self.tableView.reloadData()
вызываются? Я обнаружил, что он добавляет мои новые строки, ноnoDataLabel
под ними все еще отображается.self.tableView.backgroundView = nil
в мой оператор if раньшеreturn jobs_list.count
работает хорошо. спасибоnumberOfSections
должен вернуть счет, и все. То же самое дляnumberOfRowsInSection
. Их можно вызывать много раз в любое время. Никогда не обновляйте представления, не обновляйте данные и не делайте ничего, кроме возврата счетчика. Логика обновления представлений никогда не должна быть в этих методах.Вы можете попробовать этот элемент управления. Это довольно аккуратно. DZNEmptyDataSet
Или на вашем месте все, что я сделал бы, это
Очень просто
источник
Swift 3 (обновлено):
источник
numberOfSections
должен вернуть счет, и все. То же самое дляnumberOfRowsInSection
. Их можно вызывать много раз в любое время. Никогда не обновляйте представления, не обновляйте данные и не делайте ничего, кроме возврата счетчика. Логика обновления представлений никогда не должна быть в этих методах.Swift3.0
Я надеюсь, что это сервер вашей цели ...... В вашем UITableViewController.
Класс-помощник с функцией:
источник
numberOfSections
должен вернуть счет, и все. То же самое дляnumberOfRowsInSection
. Их можно вызывать много раз в любое время. Никогда не обновляйте представления, не обновляйте данные и не делайте ничего, кроме возврата счетчика. Логика обновления представлений никогда не должна быть в этих методах.Я думаю, что самый элегантный способ решить вашу проблему - это переключиться с a
UITableViewController
на a,UIViewController
которое содержитUITableView
. Таким образом, вы можете добавить все,UIView
что хотите, в качестве подвидов основного представления.Я бы не рекомендовал использовать для этого UITableViewCell, вам может потребоваться добавить дополнительные вещи в будущем, и все может быстро стать некрасивым.
Вы также можете сделать что-то подобное, но это тоже не лучшее решение.
источник
UIViewController
содержащийUITableView
.UITableViewController
, потому что использовать его не намного проще, чем делать наоборот, но он ограничивает вашу способность что-то менять в будущем.Используйте этот код в своем
numberOfSectionsInTableView
методе: -источник
numberOfSections
должен вернуть счет, и все. То же самое дляnumberOfRowsInSection
. Их можно вызывать много раз в любое время. Никогда не обновляйте представления, не обновляйте данные и не делайте ничего, кроме возврата счетчика. Логика обновления представлений никогда не должна быть в этих методах.SWIFT 3
источник
Если вы не используете нижний колонтитул tableview и не хотите, чтобы tableview заполнял экран пустыми ячейками таблицы по умолчанию, я бы посоветовал вам установить нижний колонтитул tableview на пустой UIView. Я не знаю правильного синтаксиса для этого в obj-c или Swift, но в Xamarin.iOS я бы сделал это так:
Приведенный выше код приведет к просмотру таблицы без пустых ячеек
источник
Вот решение, которое сработало для меня.
Добавьте следующий код в новый файл.
Измените класс таблицы на пользовательский класс MyTableView из раскадровки или .xib
(это будет работать только для первого раздела. Если вы хотите настроить больше, внесите соответствующие изменения в функцию MyTableView reloadData () для других разделов)
источник
@IBInspectable var emptyStateText: String?
и отметьте этот класс, так как@IBDesignable
тогда вы сможете изменить другой текст пустого состояния для разных сцен в раскадровке или xibs. Наслаждайтесь! :)Я бы представил представление наложения, которое имеет вид и сообщение, которое вы хотите, если представление таблицы не имеет результатов. Вы можете сделать это в ViewDidAppear, чтобы у вас были результаты до того, как отображать / не отображать представление.
источник
Если вы хотите сделать это без кода, попробуйте это!
Нажмите на свой tableView.
Измените стиль с «простого» на «сгруппированный».
Теперь, когда вы используете ....
tableView.backgroundView = ВСТАВЬТЕ ЭТИКЕТКУ ИЛИ ПРОСМОТРЕТЬ
Он не покажет разделители!
источник
Добавьте этот код в один файл и измените тип коллекции на CustomCollectionView.
источник