Objective c 如何在UITableView中显示零行的表
我正在将内容动态加载到UITableView中。如果有数据,表需要显示数据。如果没有数据,表格应显示普通页面。但在我的应用程序中,该表显示带有两条分隔线的普通页面。我需要删除此分隔线并显示一个纯白色页面。请建议Objective c 如何在UITableView中显示零行的表,objective-c,iphone,uitableview,Objective C,Iphone,Uitableview,我正在将内容动态加载到UITableView中。如果有数据,表需要显示数据。如果没有数据,表格应显示普通页面。但在我的应用程序中,该表显示带有两条分隔线的普通页面。我需要删除此分隔线并显示一个纯白色页面。请建议 任何帮助都将不胜感激 如果数据源为空,则可以检查是否存在空的大小写。在tableview顶部添加占位符视图。如果它们不是空的,请删除占位符视图。普通的UITableView将始终显示分隔线,即使它是空的。您可能会注意到,如果列表中只有一行或两行,则仍然可以看到分隔线。这是默认行为,不应被
任何帮助都将不胜感激 如果数据源为空,则可以检查是否存在空的大小写。在tableview顶部添加占位符视图。如果它们不是空的,请删除占位符视图。普通的
UITableView
将始终显示分隔线,即使它是空的。您可能会注意到,如果列表中只有一行或两行,则仍然可以看到分隔线。这是默认行为,不应被覆盖,除非您有一个真正的好理由
我猜你只看到两条分隔线,因为你的行很高
如果确实需要删除分隔符行,请将表视图上的
分隔符样式
属性设置为UITableViewCellSeparatorStyleNone
。请注意,这将影响所有行。因此,如果您仍然希望为确实存在的行使用分隔符,则必须在自己的UITableViewCell
对象中绘制这些分隔线。如果您提供页脚视图,则空行之间的分隔符将消失
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
myTableView.tableFooterView = view;
两个步骤:
在viewDidLoad中添加此代码
- (void)viewDidLoad
{
emptyplaceholder = [[UILabel alloc] initWithFrame:CGRectMake(80, 100, 640, 100)];
emptyplaceholder.text = NSLocalizedString(@"No shift changes...", "no shift changes");
emptyplaceholder.alpha = 0.2;
[self.view addSubview:emptyplaceholder];
}
在controllerDidChangeContent中添加此代码:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
// The fetch controller has sent all current change notifications, so tell the table view to process all updates.
if (self.fetchedResultsController.fetchedObjects.count > 0)
emptyplaceholder.hidden = YES;
else
emptyplaceholder.hidden = NO;
[self.tableView endUpdates];
}
因此,当有日期单元格时,标签将消失,当删除到表中无数据时,标签将再次显示。可以使用@bbarnhart解决方案将其简化为一行:
myTableView.tableFooterView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
在没有数据“无数据可用”的情况下,向UIViewController添加新UIView的良好UI设计将隐藏UITableView的分隔线对我来说听起来像是一个丑陋的黑客,丑陋的黑客往往会破坏真正的功能。我相信反之亦然:应该有“东西”为了向用户解释应用程序正在按计划工作,它没有崩溃,它已经完成了它正在做的事情——最重要的是——这个空间是故意空的,但只是暂时的。我不明白为什么这是一个丑陋的黑客行为,它只是一种在没有数据的情况下显示自定义视图的方式。自定义视图可以解释为什么没有数据以及用户如何输入数据。这是iPhone(和Mac)应用程序中的常见做法。请注意,
tableFooterView
是一个保留属性,因此view
应该(自动)发布。工作正常。再简单不过了。另外,您不需要在这里设置框架<代码>myTableView.tableFooterView=[[UIView alloc]init]代码>已经足够好了。它可以更简单一些!:)[self.tableView setTableFooterView:[UIView new]];还有,为什么要将其设置为一个像素高?如果(出于某种原因)您希望以“长”的方式执行此操作,请将其设置为0,0,0抱歉,我的模型是一个具有相同日期信息的tableView控制器。所以单词应该是:当占位符UILabel将隐藏时,表视图有“真实”的表视图单元格。。。[self.tableView setTableFooterView:[UIView new]];请注意,实际的解决方案只是将其设置为“分组”样式表!要做到这一点,只需点击托马斯·德科的回答: