是否可以让 UITableViewController 隐藏其单元格直到有内容,同时显示“无内容”消息? [关闭]

Posted

技术标签:

【中文标题】是否可以让 UITableViewController 隐藏其单元格直到有内容,同时显示“无内容”消息? [关闭]【英文标题】:Is it possible to have a UITableViewController hide its cells until there's content, and in the meantime display a "no content" message? [closed] 【发布时间】:2013-05-04 03:06:04 【问题描述】:

类似于 Apple 在其音乐应用中的做法:

我想要一个UITableViewController,但是如果有内容,我最好只显示单元格,否则显示“无内容”消息。只需将UIView 放在表格视图的顶部?

【问题讨论】:

你能发布一些你已经尝试过的代码吗? 【参考方案1】:

根据需要设计一个无内容视图 (UIView),将该视图添加到 self.view 并将其放置在表格视图的顶部。最初将其隐藏。然后在- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 方法中,你可以做这样的事情。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    int count = songsArray.count;

    if(count==0)
        self.noContentView.hidden = NO;
    else
        self.noContentView.hidden = YES;
    

    return count;

【讨论】:

【参考方案2】:

您可以计算 tableView:numberOfRowsInSection:,并添加一个子视图(这是您的空视图,例如:imageView 或 UILabel )取决于您的count

例如,在您的 viewDidLoad 中创建一个自定义的“空”标签

- (void)viewDidLoad

   [super viewDidLoad];

   _emptyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
   _emptyView.backgroundColor = [UIColor clearColor];

   // add en empty notes image placholder
   // when there is no data to display
   _emptyNoteImageView         = [[UIImageView alloc] initWithFrame:CGRectMake(((self.view.bounds.size.width) / 3), 50, 119, 120)];
   _emptyNoteImageView.image   = [UIImage imageNamed:@"some_empty_images"];

   _emptyLabel                 = [[UILabel alloc] initWithFrame:CGRectMake(((self.view.bounds.size.width) / 5), self.view.bounds.size.width - 150, 200, 20)];
   _emptyLabel.text            = @"No note to display";
   _emptyLabel.font            = [UIFont fontWithName:@"HelveticaNeue-Medium" size:12.0f];
   _emptyLabel.textAlignment   = NSTextAlignmentCenter;
   _emptyLabel.textColor       = [UIColor lightGrayColor];
   _emptyLabel.shadowColor     = [UIColor whiteColor];
   _emptyLabel.backgroundColor = [UIColor clearColor];

   [_emptyView addSubview:_emptyLabel];

然后,根据您的 numberOfRowsInSection 计数,您可以在 self.view 中添加/删除它。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

    count = [self.dataSource count];

    if (count > 0) 
        [_emptyView removeFromSuperview];
     else 
        [self.view addSubview:_emptyView];
    

    return count;

或者简单地说,你可以使用这个类别...... https://github.com/nxtbgthng/UITableView-NXEmptyView

-- 希望对你有帮助!

【讨论】:

感谢您付出额外的努力并展示了一个构建 UI 元素的示例。 这应该有更多的赞成票。并不是说我只喜欢你花时间创建一个工作示例,链接库是一个极好的补充。我在我的大部分项目中都使用它。 +1【参考方案3】:

假设如果您使用 NSMUtableArray(“数组”)填充 UITableView。

-(void)viewDidLoad

     [super viewDidLoad];

     UIView *noDataView = [[UIView alloc] initWithFrame:self.tableView.frame];

     UILabel *noDataLabel = [[UILabel alloc] initWithFrame:CGRectMake(50,50,100,50)];
     [noDataLabel setText:@"No Data Found"];
     [noDataView addSubview:noDataLabel];

     [noDataView setHidden:TRUE];

     array=[self fetchDataIntoArray];

     if([array count]==0)
     
          noDataView.hidden=FALSE;
          [self.view bringSubviewToFront:noDataView];

          self.tableView.hidden = TRUE;
     
     else
     
          self.tableView.hidden=FALSE;
          [self.view bringSubviewToFront:self.tableView];

          noDataView.hidden = TRUE;
     


【讨论】:

以上是关于是否可以让 UITableViewController 隐藏其单元格直到有内容,同时显示“无内容”消息? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 prepareForSegue 中嵌入 UINavigationController?

viewController的生命周期

将 UITableView 实例化为弹出框时,UITableViewCell 的属性为零

是否可以让 Apple Watch 直接读取心率?

是否可以让 CouchApp 自动发送请求?

是否可以让 Siri 开始对话?