查看更新時,我需要更改選項卡欄選定的專案。所以,我有 4 個專案的標簽欄,我希望當單擊最后一個索引中的按鈕時,查看更新和選定的專案也保持在最后一個(3)。但是當我單擊按鈕時,所選專案會發生變化并顯示 firstviewcontroller。我在按鈕單擊中使用此代碼
let tabBarVC = UIStoryboard(name: "TabBarViewController", bundle: nil).instantiateViewController(withIdentifier: "CustomTabBarViewController")
let nav = UINavigationController(rootViewController: tabBarVC)
nav.setAsRoot()
當我將所選專案設定為 3 時,CustomTabBarViewController這viewDidload沒關系,但我需要在單擊按鈕時,當標簽欄顯示時并不總是有效。
uj5u.com熱心網友回復:
如果需要重繪 所有 vcs
let tabBarVC = UIStoryboard(name: "TabBarViewController", bundle: nil).instantiateViewController(withIdentifier: "CustomTabBarViewController") as! CustomTabBarViewController
tabBarVC.selectedIndex = 3
let nav = UINavigationController(rootViewController: tabBarVC)
nav.setAsRoot()
但是如果你只需要重繪 最后一個 vc 那么
let tabBarVC = self.tabBarController as! CustomTabBarViewController
let vc = // load only 3rd vc from storyboard with it's identifier
tabBarVC.viewControllers![3] = vc
uj5u.com熱心網友回復:
基本思想是,tabBarController:shouldSelectViewController: selector每當用戶單擊選項卡項時,都會呼叫 UITabBarController 委托中的 。
因此,通過適當地定義該方法,您有機會在當前視圖控制器被用戶通過單擊選項卡欄選擇的視圖控制器替換之前進行自己的處理。
因此,如果您希望阻止當前視圖控制器被替換,即當事務正在進行時,只需從此選擇器回傳 NO。
import UIKit
class TabBarViewController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self // Delegate self to handle delegate methods.
}
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
let selectedIndex = tabBarController.viewControllers?.firstIndex(of: viewController)!
if selectedIndex == 3 { // <- The index for which you don't want to set view.
// Do anything.
return false
}
return true
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497945.html
