3

我现在在谷歌上寻找 3 个小时如何删除 tableview 并在 tableview 为空时显示图像(没有更多行)。有人知道吗?我知道这是可能的,因为我在很多应用程序上都看到了它。

我能找到的是:

// Check if table view has any cells
int sections = [self.tableView numberOfSections];
BOOL hasRows = NO;
for (int i = 0; i < sections; i++)
    hasRows = ([self.tableView numberOfRowsInSection:i] > 0) ? YES : NO;

if (sections == 0 || hasRows == NO)
{
    UIImage *image = [UIImage imageNamed:@"test.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

    // Add image view on top of table view
    [self.tableView addSubview:imageView];

    // Set the background view of the table view
     self.tableView.backgroundView = imageView;
}

在哪里放这个?

谢谢!

4

4 回答 4

6

如果你使用 Storyboard 只是把你的观点放在你的后面UITableView

如果您的数据数组在创建时为空,只需隐藏您UITableView以在其后面显示“空表”视图。

[tableView setHidden:YES];
于 2013-01-15T19:30:24.593 回答
1

请参考: http ://www.unknownerror.org/Problem/index/905493327/how-do-i-display-a-placeholder-image-when-my-uitableview-has-no-data-yet/

感谢 Cocoanut 和 Thomas:

@interface MyTableViewController : UITableViewController
{
      BOOL hasAppeared;
      BOOL scrollWasEnabled;
      UIView *emptyOverlay;
}

- (void) reloadData;
- (void) checkEmpty;

@end

@implementation MyTableViewController

- (void)viewWillAppear:(BOOL)animated
{
   [self reloadData];
   [super viewWillAppear: animated];
}

- (void)viewDidAppear:(BOOL)animated
{
   hasAppeared = YES;

   [super viewDidAppear: animated];

   [self checkEmpty];
}

- (void)viewDidUnload
{
   if (emptyOverlay)
   {
      self.tableView.scrollEnabled = scrollWasEnabled;
      [emptyOverlay removeFromSuperview];
      emptyOverlay = nil;
   }
}

- (UIView *)makeEmptyOverlayView
{
    UIView *emptyView = [[[NSBundle mainBundle] loadNibNamed:@"myEmptyView" owner:self options:nil] objectAtIndex:0];
    return emptyView;
}

- (void) reloadData
{
   [self.tableView reloadData];

   if (hasAppeared &&
       [self respondsToSelector: @selector(makeEmptyOverlayView)])
      [self checkEmpty];
}

- (void) checkEmpty
{
   BOOL isEmpty = YES;

   id<UITableViewDataSource> src = self.tableView.dataSource;
   NSInteger sections(1);
   if ([src respondsToSelector: @selector(numberOfSectionsInTableView:)])
      sections = [src numberOfSectionsInTableView: self.tableView];
   for (int i = 0; i < sections; ++i)
   {
      NSInteger rows = [src tableView: self.tableView numberOfRowsInSection: i];
      if (rows)
         isEmpty = NO;
   }

   if (!isEmpty != !emptyOverlay)
   {
      if (isEmpty)
      {
         scrollWasEnabled = self.tableView.scrollEnabled;
         self.tableView.scrollEnabled = NO;
         emptyOverlay = [self makeEmptyOverlayView];
         [self.tableView addSubview: emptyOverlay];
      }
      else
      {
         self.tableView.scrollEnabled = scrollWasEnabled;
         [emptyOverlay removeFromSuperview];
         emptyOverlay = nil;
      }
   }
   else if (isEmpty)
   {
      // Make sure it is still above all siblings.
      [emptyOverlay removeFromSuperview];
      [self.tableView addSubview: emptyOverlay];
   }
}

@end
于 2014-04-14T10:57:45.510 回答
0

UITableView是 的(非直接)子类UIView,所以你想做的很简单。

假设您将此表视图作为视图控制器视图的子视图。在这种情况下,您只需创建与表视图具有相同框架的另一个视图,然后从超级视图中删除表视图,并将新创建的视图添加为视图控制器视图的子视图。很简单:

UIImageView* view= [[UIImageView alloc] initWithImage: yourImage];
view.frame= tableView.frame;
[tableView removeFromSuperview];
[self.view addSubview: view];
于 2013-01-15T19:26:20.240 回答
-3

把它放在 - (void)viewDidAppear 上。祝你好运 ;)

于 2015-05-16T00:49:06.183 回答