[英]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.