【问题标题】:How to show another viewcontroller if tableView data is empty如果 tableView 数据为空,如何显示另一个视图控制器
【发布时间】:2017-05-25 20:42:15
【问题描述】:

当没有显示另一个视图控制器的 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。那PlaceholderVC也可以presentVC创建一个新的表格单元格。当我点击保存时,它会关闭并返回PlaceholderVC。我可以将保存功能修改为presentFeedVC,但我感觉不对,应该是dismiss()。如果data > 0 和我创建了一个新数据,那么保存函数仍然会存在。看看发生了什么?保存应该运行一些代码然后关闭。我不想一层又一层地添加。

如果我可以在 tableView 上添加一个隐藏的图像和标签,我可以有一个干净的代码。那可能吗?当我将图像视图拖到 tableView 上时,它会缩小。

我可以让这一切发挥作用,但如果所有 VC 都有很多“礼物”,那就太多了。

【问题讨论】:

  • 您可以在 tableview 上放置图像,您只需要正确设置约束并确保您使用的是 UIViewController 而不是 UITableViewController
  • @Paulw11 我想我会使用你的方法。我使用了一个视图并将其放在我的 tableview 下方(自动布局在这里工作)。然后在控制器中:if data == 0, view.isHidden = true/false 这对我来说是最好的。谢谢。

标签: ios swift xcode uiviewcontroller swift3


【解决方案1】:

根据您的问题,您需要执行以下步骤:

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

【讨论】:

  • 以前试过。 placeholdervc 提供一个 vc 来创建数据。当我点击保存时,它会返回到 placeholdervc。
【解决方案2】:

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

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

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

如果你被允许在你的代码中使用第三方库,你可以参考DZNEmptyDataSet

【讨论】:

    【解决方案3】:

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

     @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
       }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      相关资源
      最近更新 更多