Представьте представление по умолчанию вместо tableview, если источник данных пуст

Приложение iOS, над которым я сейчас работаю, основано на табеле, а одна из вкладки – UITableViewController.

Дело в том, что когда я открываю эту вкладку с пустым источником данных (по какой-либо причине), я хотел бы добавить другое представление с каким-то сообщением / изображением вместо пустого представления, которое я получаю с помощью tableviewcontroller.

Я попробовал что-то вроде этого:

- (void)viewWillAppear:(BOOL)animated { if ([myData count] == 0) { if (!emptyView) { emptyView = [[UIView alloc] initWithFrame:self.view.frame]; UILabel *emptyMsg = [[UILabel alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height / 2, self.view.frame.size.width, 20)]; emptyMsg.text = @"This is Empty !"; emptyMsg.textAlignment = UITextAlignmentCenter; [emptyView addSubview:emptyMsg]; } [self.view insertSubview:emptyView atIndex:0]; } else { if (emptyView != nil) { [emptyView removeFromSuperview]; emptyView = nil; } [self.tableView reloadData]; [super viewWillAppear:animated]; } } 

С пустым представлением, определенным как iVar в контроллере представления.

Но это не работает должным образом, и я не могу найти причину: /

Может ли кто-нибудь из вас взглянуть на него и дать мне правильный способ совершить такое поведение?

Благодаря,

UITableViewController не позволяет вам добавлять subviews в его представление (tableView).

Вы должны сделать UIViewController и добавить UITableView самостоятельно с помощью вашего дополнительного emptyView .

Не забудьте установить dataSource и delegate !

Обновление. Я сделал подкласс UIViewController, чтобы каждый раз избегать подражания UITableViewController.

.час

 // // GCTableViewController.h // GCLibrary // // Created by Guillaume Campagna on 10-06-17. // Copyright 2010 LittleKiwi. All rights reserved. // #import <UIKit/UIKit.h> //Subclass of UIViewController that mimicks the UITableViewController except that the tableView is a subview of self.view and allow change of the frame of the tableView @interface GCTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> @property (nonatomic, readonly) UITableView *tableView; - (id) initWithStyle:(UITableViewStyle)style; //Subclass if you want to change the type of tableView. The tableView will be automatically placed later - (UITableView*) tableViewWithStyle:(UITableViewStyle) style; @end 

.m

 // // GCTableViewController.m // GCLibrary // // Created by Guillaume Campagna on 10-06-17. // Copyright 2010 LittleKiwi. All rights reserved. // #import "GCTableViewController.h" @implementation GCTableViewController @synthesize tableView; - (id) initWithStyle:(UITableViewStyle) style { if (self = [super initWithNibName:nil bundle:nil]) { tableView = [[self tableViewWithStyle:style] retain]; self.tableView.delegate = self; self.tableView.dataSource = self; } return self; } - (void)viewDidLoad { [super viewDidLoad]; [self.view addSubview:self.tableView]; self.tableView.frame = self.view.bounds; self.tableView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); } - (void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; } #pragma mark TableView methods - (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger) tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section { return 0; } - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { return nil; } #pragma mark Getter - (UITableView *) tableViewWithStyle:(UITableViewStyle)style { return [[[UITableView alloc] initWithFrame:CGRectZero style:style] autorelease]; } - (void)dealloc { [tableView release]; tableView = nil; [super dealloc]; } @end 

Я решил эту проблему, добавив UIView в заголовок tableview с размером кадра, равным размеру tableview и запрещающим взаимодействие пользователя с табличным представлением:

  UIView *emptyView = [[UIView alloc] initWithFrame:self.tableView.frame]; /* Customize your view here or load it from a NIB */ self.tableView.tableHeaderView = emptyView; self.tableView.userInteractionEnabled = NO; 

Когда у вас есть данные, вы просто удаляете заголовок и повторно включаете взаимодействие с пользователем:

  self.tableView.tableHeaderView = nil; self.tableView.userInteractionEnabled = YES; 

Вы могли бы попытаться установить количество строк в ноль. Затем вставьте представление результатов не в виде заголовка.

  • Тупик в UITableViewCell layoutSubviews при назначении аксессуар
  • Укажите высоту UITableViewCell в результатах поиска
  • загружать изображения из Интернета в UIImageView внутри UITableView
  • Каков правильный способ удаления строки из UITableView?
  • Как я могу перезагрузить tableView, указанный в RootViewController, из таблицы категорий?
  • Перезапустить вид таблицы, но не перемещать iOS
  • Работа с клавиатурой, как в приложении «Сообщения» в iOS 7
  • Перемещение заголовка в режиме редактирования UITableView
  • Создание группового UITableview с различными типами ячеек
  • Swift3: невозможно удалить строки в секции
  • Показать миниатюру UIImageView
  • Давайте будем гением компьютера.