首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理空的UITableView。打印友好的信息

处理空的UITableView。打印友好的信息
EN

Stack Overflow用户
提问于 2013-04-01 15:52:59
回答 22查看 93K关注 0票数 146

我有一个UITableView,在某些情况下为空是合法的。因此,与其显示应用程序的背景图像,我更希望在屏幕上打印一条友好的信息,例如:

此列表现在为空。

做这件事最简单的方法是什么?

EN

回答 22

Stack Overflow用户

回答已采纳

发布于 2013-07-02 22:20:36

UITableView的backgroundView属性是您的朋友。

viewDidLoadreloadData的任何地方,您应该确定表是否为空,并使用包含UILabel的UIView更新UITableView的backgroundView属性,或者将其设置为零。就这样。

当然,可以让UITableView的数据源执行双重任务,并返回一个特殊的“列表是空的”单元格,我觉得这是一个假象。突然,numberOfRowsInSection:(NSInteger)section不得不计算其他部分的行数--它没有被要求确保它们也是空的。您还需要创建一个包含空消息的特殊单元格。另外,不要忘记,您可能需要更改单元格的高度以容纳空消息。这一切都是可行的,但看起来就像绷带上的绷带。

票数 198
EN

Stack Overflow用户

发布于 2017-07-18 04:16:39

和Jhonston的回答一样,但我更喜欢把它作为延期:

代码语言:javascript
运行
复制
import UIKit

extension UITableView {

    func setEmptyMessage(_ message: String) {
        let messageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.bounds.size.width, height: self.bounds.size.height))
        messageLabel.text = message
        messageLabel.textColor = .black
        messageLabel.numberOfLines = 0
        messageLabel.textAlignment = .center
        messageLabel.font = UIFont(name: "TrebuchetMS", size: 15)
        messageLabel.sizeToFit()

        self.backgroundView = messageLabel
        self.separatorStyle = .none
    }

    func restore() {
        self.backgroundView = nil
        self.separatorStyle = .singleLine
    }
}

用法:

代码语言:javascript
运行
复制
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if things.count == 0 {
        self.tableView.setEmptyMessage("My Message")
    } else {
        self.tableView.restore()
    }

    return things.count
}
票数 127
EN

Stack Overflow用户

发布于 2016-06-05 14:13:45

根据这里的答案,这是我做的一个快速类,您可以在UITableViewController中使用它。

代码语言:javascript
运行
复制
import Foundation
import UIKit

class TableViewHelper {

    class func EmptyMessage(message:String, viewController:UITableViewController) {
        let rect = CGRect(origin: CGPoint(x: 0,y :0), size: CGSize(width: self.view.bounds.size.width, height: self.view.bounds.size.height))
        let messageLabel = UILabel(frame: rect)
        messageLabel.text = message
        messageLabel.textColor = UIColor.blackColor()
        messageLabel.numberOfLines = 0;
        messageLabel.textAlignment = .Center;
        messageLabel.font = UIFont(name: "TrebuchetMS", size: 15)
        messageLabel.sizeToFit()

        viewController.tableView.backgroundView = messageLabel;
        viewController.tableView.separatorStyle = .None;
    }
}

在您的UITableViewController中,您可以在numberOfSectionsInTableView(tableView: UITableView) -> Int中调用它

代码语言:javascript
运行
复制
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    if projects.count > 0 {
        return 1
    } else {
        TableViewHelper.EmptyMessage("You don't have any projects yet.\nYou can create up to 10.", viewController: self)
        return 0
    }
}

http://www.appcoda.com/pull-to-refresh-uitableview-empty/的帮助下

票数 91
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15746745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档