如果tableView数据为空,如何显示另一个视图控制器



如果没有显示另一个视图控制器的tableView数据,您将如何构建这样的应用程序?

如果表视图没有数据,但我需要显示另一个视图,则web显示显示消息的方法。该视图控制器(PlaceholderVC)具有图像和标签(404样式的页面等)。

基本上,在第一个屏幕(初始)上,用户点击按钮进入tableView。在导航栏上,可以通过一个项目创建新的表格单元格(数据)。除非转到tableView控制器(FeedVC),否则没有其他方法可以创建该项。我很难让它正常工作。我实现的有很多错误:

//FeedVC
let data = []
viewDidLoad() {
[...]
}
numberOfRowsInSection {
if data.count == 0 {
showPlaceholderVC()
} else {
return data.count
}
}
func showPlaceholderVC() {
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let pc: PlaceholderVC = storyboard.instantiateViewController(withIdentifier: "placeholderVC") as! PlaceholderVC
self.showDetailViewController(pc, sender: Any?.self)
}

那会带我去PlaceholderVC。该CCD_ 2也可以CCD_。当我点击save时,它会消失并返回到PlaceholderVC。我可以将保存函数修改为presentFeedVC,但我觉得不对,应该是dismiss()。如果data > 0和我创建了一个新数据,那么保存函数仍然存在。看看发生了什么?Save应该运行一些代码,然后关闭。我不想再增加一层又一层。

如果我能在tableView上添加一个隐藏的图像和标签,我就能得到一个干净的代码。这可能吗?当我在tableView上拖动图像视图时,它会收缩。

我可以让这一切发挥作用,但这将是太多的"如果"都是有很多"礼物"的风险投资。

根据您的问题,您需要遵循以下步骤:

  1. 如果您正在调用webservice,那么在获取响应检查数组大小时首先调用webservice。若数组大小大于0意味着您可以在表上显示数据,若数组为空,则需要在默认控制器或占位符控制器上导航

是否总是推送一个单独的视图控制器来显示占位符文本?

如果没有,则可以将tableView作为主视图的子视图,并将placeholderView再次作为主视图中的子视图。

您可以根据数据隐藏和显示tableView。

如果您被允许在代码中使用第三方库,您可以引用DZNEmptyDataSet

根据我的说法,采用隐藏视图(在没有数据时显示任何您想显示的内容)是更好的方法。它可以是:

@IBOutlet weak var mEmptyView: UIView!
@IBOutlet weak var mTableView: UITableView!
var tableViewDataArray: [String] = []

override func viewDidLoad() {
super.viewDidLoad()
tableViewDataArray = //get array from your resource//  
if tableViewDataArray.count > 0 {
mEmptyView.hidden = false
mTableView.hidden = true
}else{
mEmptyView.hidden = true
mTableView.hidden = false
}

}

最新更新