簡體   English   中英

如何在單擊 tabBar 項 Swift 上刷新 tableView?

[英]How to refresh a tableView on click tabBar item Swift?

我有一個 tableView 到選項卡欄上的 viewController 中。 當我點擊 tabBar 項目時,tableView 沒有刷新。 但我有 viewWillAppear 功能:

 override func viewWillAppear(animated: Bool) {
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.tableView.reloadData()
    })
}

我正在嘗試使用標簽欄委托調用此函數,但不起作用:

 func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
     dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.tableView.reloadData()
    })
 }

為什么不重新加載?

謝謝!

您不需要在此涉及選項卡欄控制器。 這樣做會矯枉過正。 您將創建令人困惑的代碼,稍后有人會想要撕掉這些代碼。 viewWillAppear(_:)更新表視圖幾乎總是最好的方法。

如果一切都設置正確,則每次用戶選擇該選項卡並且您的視圖變為可見時,您的視圖控制器的viewWillAppear(_:)方法都會被調用。 因此,如果它沒有被調用,那么您的標簽欄及其視圖控制器的設計就存在問題。

創建一個新項目並選擇選項卡式應用程序模板。 打開 SecondViewController 文件並添加一個viewWillAppear(_:)方法。 在那里添加一個斷點。 每次切換到第二個選項卡時,您都會看到它被調用。

還有一些想法……

您會在viewWillAppear(_:)文檔中注意到它說您必須始終調用 super。 你不。 你應該。 但這與您的問題無關。

此外,無需切換到主隊列。 viewWillAppear(_:)將始終在主隊列上調用。

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    tableView.reloadData()
}

快速 5.0 的答案

在主線程中重新加載UITableView然后檢查。 我希望這對你有用。

override func viewWillAppear(_ animated: Bool) {
    DispatchQueue.main.async {  
        self.tableView.reloadData()
    }
}

您可以在這里找到答案: 像在 IOS 上的 Instagram 相機頁面中一樣,從選項卡中打開 viewcontroller

基本上,您需要創建一個繼承自 UITabBarController 的控制器,並將其在 Storyboard 中設置為您的 tabBarView 的自定義類。

然后通過情節提要為每個選項卡設置標簽。

之后,如果單擊特定選項卡,您可以使用委托方法調用操作。

委托方法應如下所示:

override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
    switch item.tag{
    case 1: //code here
         break
    default: break
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM