簡體   English   中英

如何禁用我的 UITabBarController 的 moreNavigationController 的某些選項卡?

[英]How can I disable some of the tabs of the moreNavigationController of my UITabBarController?

我正在使用 XCode 13.0、Swift 5.5 和 Storyboard。 這是一款適用於裝有 iOS 15 的 iPhone 的移動應用程序。

我總共有 7 個選項卡,所有選項卡都帶有圖標。 我的應用程序的標簽欄中有 4 個標簽和一個“更多”標簽。 用戶單擊“更多”選項卡后,會顯示 3 個附加選項卡。 我希望禁用這些附加選項卡中的前 2 個。 它們需要是灰色的,當用戶點擊這兩個中的任何一個時,我希望應用程序什么都不做(不顯示任何頁面,不導航到任何地方)。 我正在使用 Apple 定義的原始 UITabBarController 和 moreNavigationController,我沒有對它們中的任何一個進行子類化。 在我的故事板上,我向這 2 個禁用的選項卡添加了 2 個 UIViewControllers,但我以這種方式將它們設置為禁用:

取消標簽欄圖標

這根本不起作用。 當用戶單擊 2 個禁用的選項卡時,它們會顯示 2 個空的 ViewController。 我希望他們不要顯示任何東西。

我還嘗試從我的 UITabBarController 第一次打開的頁面訪問 moreNavigationController 的選項卡。 我嘗試以編程方式禁用這兩個選項卡。 但是我沒有設法訪問這兩個選項卡,我只能訪問顯示在選項卡欄中的主選項卡(我不需要訪問這些)。 單擊“更多”選項卡后,如何禁用顯示的選項卡並將其着色為灰色?

let moreControllerItems = tabBarController?.moreNavigationController.toolbarItems
    
if let tabArray = moreControllerItems {
   let tabBarItem1 = tabArray[0]
   let tabBarItem2 = tabArray[1]

   tabBarItem1.isEnabled = false
   tabBarItem2.isEnabled = false
}`

此代碼不起作用,moreControllerItems 變量為零。 tabBarController 變量不是 nil,我可以從這里訪問我的 UITabBarController,但它對我幫助不大。 我用很多不同的方式搜索了這個問題,但我找不到解決方案。 任何幫助,將不勝感激。 我真的需要解決這個問題,如果您有任何想法如何解決這個問題,請寫評論。 謝謝!

您可以從 TabBarController 禁用 tabBar 項目。

class TabVC: UITabBarController {

override func viewDidLoad() {
    super.viewDidLoad()
}

func disableTabBar(itemNo: Int) {
    if let items = tabBar.items, itemNo < items.count {
        items[itemNo].isEnabled = false
    }
}

您可以從附加到 TabBarController 的任何子 Viewcontroller 訪問此功能

class MoreVC: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    if let tabBarVC = tabBarController as? TabVC {
        tabBarVC.disableTabBar(itemNo: 1)
    }
}

簡而言之:您不能禁用它。 如果要禁用更多視圖控制器中的項目,則必須在第五個選項卡中使用自定義視圖控制器

我在這里解釋為什么我們不能這樣做以及我們有哪些限制。

如果 UITabBarController 中的項目超過五個,Apple 將顯示更多選項卡。 更多選項卡包含附加到一種 UIMoreListController 的 UINavigationController。 你可以通過

print moreNavigationController.viewControllers[0]

UIMoreListController 不可訪問。 在您的情況下,其余三個項目列在 UIMoreListController 中。 雖然我們仍然可以訪問 Viewcontroller 的 tabBarItem 並且我們可以禁用它。 您可以通過單擊編輯選項進行檢查。

在此處輸入圖片說明 在此處輸入圖片說明

但是,只要它在 UIMoreListController 中,用戶就可以點擊它。 因為我們不是與 tabBar 交互,而是與列表中的項目交互。 一旦您使用 MoreViewcontroller 中的編輯選項將項目移動到前四個位置中的任何一個,用戶將無法單擊。

在此處輸入圖片說明 在此處輸入圖片說明

暫無
暫無

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

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