如果数据源为空,则为tableview的占位符文本

Sam*_*nen 4 uitableview uikit ios

我想向用户显示一个文本,以通知数据源中没有内容.例如,如果你没有联系人,你可以在联系人应用程序中看到这种行为,它在表格中间用灰色文本表示.有没有简单的方法来做到这一点,或者我必须使用一些技巧,如创建空单元格或东西..谢谢!

Ano*_*mie 8

没有(AFAIK)任何内置方式让表视图在空时显示消息.tableView:numberOfRowsInSection:如果数据源为空,则可以返回1并tableView:cellForRowAtIndexPath:返回"虚拟"单元格,表示没有数据.或者您可以添加自己的视图来显示相应的消息,完全忽略(空)表视图.


use*_*560 7

这是一个简短而又甜蜜的解决方案.

第一步,在UITableViewController初始化中,添加:

UILabel *placeholder = [[UILabel alloc] init];
placeholder.font = [placeholder.font fontWithSize:20];
placeholder.numberOfLines = 0; // Use as many lines as needed.
placeholder.text = NSLocalizedString(@"Your text here", nil);
placeholder.textAlignment = NSTextAlignmentCenter;
placeholder.textColor = [UIColor lightGrayColor];

placeholder.hidden = YES; // Initially hidden.
[self.tableView addSubview:placeholder];

self.placeholder = placeholder; // You'll need a reference to the placeholder.
Run Code Online (Sandbox Code Playgroud)

第二步,在你的UITableViewController中,添加:

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    self.placeholder.frame = self.tableView.bounds;
}
Run Code Online (Sandbox Code Playgroud)

最后一步,在需要时显示/隐藏占位符.

更好的解决方案是不使用UITableViewController.只需将一个tableView添加到UIViewController,并将占位符视图添加到tableView上方的UIViewController.使用"自动布局"使占位符垂直和水平居中.最后,在需要时显示/隐藏占位符.

你们对这个解决方案有什么看法?请评论.


Pab*_*uan 6

在 Swift 2.0 中

就在日历下方,我有一个表格视图

无视日历

func TabelaSemDados(Array:NSArray){
    if Array.count == 0 {
        tableView.tableFooterView = UIView(frame: CGRect.zero)
        tableView.backgroundColor = UIColor.clearColor()

        var label = UILabel()
        label.frame.size.height = 42
        label.frame.size.width = tableView.frame.size.width
        label.center = tableView.center
        label.center.y = (tableView.frame.size.height/2)
        label.numberOfLines = 2
        label.textColor = UIColor.grayColor()
        label.text = "No Data Text"
        label.textAlignment = .Center
        label.tag = 1

        self.tableView.addSubview(label)
    }else{
        self.tableView.viewWithTag(1)?.removeFromSuperview()
    }
}
Run Code Online (Sandbox Code Playgroud)

称为viewdidapper:

override func viewDidAppear(animated: Bool) {
    TabelaSemDados(self.Agenda)
}
Run Code Online (Sandbox Code Playgroud)