是否可以让 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?