Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在UITableView中显示零行的表_Objective C_Iphone_Uitableview - Fatal编程技术网

Objective c 如何在UITableView中显示零行的表

Objective c 如何在UITableView中显示零行的表,objective-c,iphone,uitableview,Objective C,Iphone,Uitableview,我正在将内容动态加载到UITableView中。如果有数据,表需要显示数据。如果没有数据,表格应显示普通页面。但在我的应用程序中,该表显示带有两条分隔线的普通页面。我需要删除此分隔线并显示一个纯白色页面。请建议 任何帮助都将不胜感激 如果数据源为空,则可以检查是否存在空的大小写。在tableview顶部添加占位符视图。如果它们不是空的,请删除占位符视图。普通的UITableView将始终显示分隔线,即使它是空的。您可能会注意到,如果列表中只有一行或两行,则仍然可以看到分隔线。这是默认行为,不应被

我正在将内容动态加载到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]];请注意,实际的解决方案只是将其设置为“分组”样式表!要做到这一点,只需点击托马斯·德科的回答: