2013-05-28 82 views
11

感謝您閱讀我的問題。防止tabbar在特定索引處更改選項卡 - IOS

我試圖實現一個彈出菜單,當用戶單擊索引爲4的選項卡。所以我試圖防止tabbar切換索引4時按下viewcontroller。

這裏是我的代碼:

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    if(viewController == [tabBarController.viewControllers objectAtIndex:4]){   
     NSLog(@"NO"); 
     return NO; 
    }else{ 
     NSLog(@"YES"); 
     return YES; 
    } 

} 

我實現了在viewDidLoadUITabBarControllerDelegateself.delegate = self;和它的作品只是一個時間。

當我點擊索引4選項卡時,菜單顯示並且tabbar不切換視圖(GREAT),但是當我再次單擊它時,即使我得到Log「NO」,視圖也會更改。 這裏有什麼問題?

謝謝你的任何建議!

解決

由於Kasaname的回答下面我解決它通過添加的selectedIndex並將其設置爲一個標誌指數(prevtab)。我改變prevtab到最後選擇的選項卡的索引,exept當用戶選擇指數4 我的最終代碼:

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    if(viewController == [tabBarController.viewControllers objectAtIndex:4]){ 
     self.selectedIndex = prevTab; //only change in this method  
     return NO; 
    }else{   
     return YES; 
    } 

} 
+0

爲什麼不你只用空的ViewController的第四個選項卡? – NSDmitry

+0

添加一個斷點來viewDidAppear/viewWill你的視圖控制器的方法。根據文檔,這種方法被稱爲所選視圖控制器是否改變。 –

+1

@ProFFeSSoR:你是什麼意思的空ViewController的第四個選項卡?' –

回答

4
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    if (tabBarController.selectedIndex == 0) { 

    } else if (tabBarController.selectedIndex == 1) { 

    } else if (tabBarController.selectedIndex == 2) { 

    } 
} 

爲什麼不ü使用該委託 使用該委託,將工作我想

+0

如果再次點擊'selectedIndex',該怎麼樣? –

+0

here selectedindex指的是標籤欄項目的索引,因此它對於第一個項目將會是一個。 – Kasaname

+0

並在上面的花瓶中我剛剛給出了這個例子及其直到該人如何使用和爲哪個選定索引 – Kasaname

2

這就是你怎麼可以阻止/預防的TabBar項目切換你的項目的TabBar選項卡中單擊

對於雨燕3.0

確保您已實現UITabBarControllerDelegate並設置的UITabBarController委託

然後覆蓋這代表你的控制器

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 

    if viewController == tabBarController.viewControllers?[2] { 
     return false 
    } else { 
     return true 
    } 
} 
+0

它的作品,如果你確保你正在實施** UITabBarControllerDelegate **並設置** UITabbarController的**委託=自我。 –

相關問題