2012-08-27 19 views
0

我有一個TabBarController裏面的UINavigationController,當我選擇已經選擇的tabBarItem時,NavigationController會彈出回它的rootViewController。 據我所知,這是一種自動行爲。在一個TabBarController裏面的UINavigationController中選擇已經選擇的tabBarItem將視圖彈出到rootViewController,如何改變?

我需要修改此行爲,並使用

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

再次推的viewController我想,既然我推相同常發生與自動彈出無法正常工作。

+1

到ViewController我想再次推?你在任何明星電影中演過戲嗎?像約達可能?只是在開玩笑:請重新表述它不清楚...... – tiguero

+0

實際上你想表演什麼? – Spynet

+0

檢查http://stackoverflow.com/questions/1034803/iphone-uitabbar-item-double-click-pops-controllers – CSmith

回答

0

我不知道如何改變行爲,但我強烈建議你不要混淆這樣的默認行爲。如果蘋果沒有提供一個簡單的方法來處理這種行爲,那麼這是有原因的。

字面上每個配音用戶都依賴手勢,我假設其中的一個是雙擊一個選項卡以轉到rootView。用任何這些默認的手勢搞砸,你都會保證會讓一堆VO用戶得逞。不幸的是,我很難學會這一點(使用帶自定義後退按鈕的自定義導航欄)。

希望這個答案會讓你確信重新考慮你的要求=)

0

的解決方案是UINavigationController的子類,並與使用的UITabBarController的子類。我扔了一些其他有用的功能。

而且它就好做到這一點 - 我的應用程序有5星,沒有人抱怨過:

@implementation MyNavigationController 

// This suppresses the normal pop to the root view controller 
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated 
{ 
    return @[]; 
} 

// Extra: give my base classes some notice this is going to happen 
- (UIViewController *)popViewControllerAnimated:(BOOL)animated 
{ 
    UIViewController *vc = self.topViewController; 
    if ([vc respondsToSelector:@selector(viewControllerWillBePopped)]) { 
     [vc performSelector:@selector(viewControllerWillBePopped)]; 
    } 

    return [super popViewControllerAnimated:animated]; 
} 

// Extra: let the UIViewController refuse to pop 
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item 
{ 
    BOOL ret = YES; 

    UIViewController *vc; 
    for(UIViewController *obj in self.viewControllers) { 
     if(obj.navigationItem == item) { 
      vc = obj; 
      break; 
     } 
    } 

    if ([vc respondsToSelector:@selector(shouldPop)]) { 
     NSNumber *retVal = [vc performSelector:@selector(shouldPop)]; 
     ret = [retVal boolValue]; 
     if(!ret) return NO; 
    } 
    return [super navigationBar:navigationBar shouldPopItem:item]; 
} 

@end 
相關問題