我有一个UITableView,在某些情况下为空是合法的。因此,与其显示应用程序的背景图像,我更希望在屏幕上打印一条友好的信息,例如:
此列表现在为空。
做这件事最简单的方法是什么?
发布于 2013-07-02 22:20:36
UITableView的backgroundView属性是您的朋友。
在viewDidLoad或reloadData的任何地方,您应该确定表是否为空,并使用包含UILabel的UIView更新UITableView的backgroundView属性,或者将其设置为零。就这样。
当然,可以让UITableView的数据源执行双重任务,并返回一个特殊的“列表是空的”单元格,我觉得这是一个假象。突然,numberOfRowsInSection:(NSInteger)section不得不计算其他部分的行数--它没有被要求确保它们也是空的。您还需要创建一个包含空消息的特殊单元格。另外,不要忘记,您可能需要更改单元格的高度以容纳空消息。这一切都是可行的,但看起来就像绷带上的绷带。
发布于 2017-07-18 04:16:39
和Jhonston的回答一样,但我更喜欢把它作为延期:
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
}
}用法:
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
}发布于 2016-06-05 14:13:45
根据这里的答案,这是我做的一个快速类,您可以在UITableViewController中使用它。
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中调用它
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/的帮助下
https://stackoverflow.com/questions/15746745
复制相似问题