2009-06-23 46 views
6

只是發現了一些東西:如果你有一個Tabbar與NavigationController(它有一些視圖堆棧)結合,你雙擊TabBarItem,該視圖彈出到第一個ViewController,是否你喜歡與否。iPhone UITabbar項目雙擊彈出控制器

有沒有辦法來防止這種情況?

回答

0

到目前爲止,我發現的唯一方法是製作UINavigationController的子類並覆蓋popToRootViewControllerAnimated方法返回nil。

這似乎是UITabBar在標籤兩次時調用的方法。我不知道這是否是雖然正確的方法......很想對這個問題的一些反饋...

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated { 
    return nil; 
} 
1

我只是碰到了這個問題,我自己和找到一種方法來做到這一點。做一個委託爲您的UITabBarController和實施tabBarController:shouldSelectViewController:防止選擇同一個控制器:

- (BOOL) tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc { 
    return tbc.selectedViewController != vc; 
} 

您還可以添加更復雜的邏輯,如果你只想阻止它在某些情況下。

5

你可能不應該阻止這種行爲。這是一個標準的iPhone UI慣例,比如點擊狀態欄滾動到滾動視圖的頂部。

如果你真的想這樣做,你應該實現UITabBarController委託方法-tabBarController:shouldSelectViewController:,就像mckeed提到的一樣。但是,如果您的選項卡多於五個,則selectedViewController可能是位於「更多」部分的視圖控制器,但vc將是[UITabBarController moreNavigationController]。下面是處理這種情況的實現:

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc { 
    UIViewController *selected = [tbc selectedViewController]; 
    if ([selected isEqual:vc]) { 
     return NO; 
    } 

    if ([vc isEqual:[tbc moreNavigationController]] && 
     [[tbc viewControllers] indexOfObject:selected] > 3) { 
     return NO; 
    } 

    return YES; 
} 
+1

我也建議不要阻止這種行爲沒有很好的理由。當系統範圍的快捷方式不可用時,用戶會生氣。 – 2010-03-22 08:10:30

0

我保持這樣的意圖的行爲的人,但在同一時間事情變得與平倉的VC棧優雅有趣的(例如編輯嵌套的一系列核心數據的時候作爲對象)。就我而言,這無異於取消每個VC。

因此,有沒有什麼方法可以讓我知道我們一直到根VC爲止一直在彈出?我想在viewWillDisappear期間取消/回滾操作不會削減它,因爲同樣的視圖肯定會在保存後消失。我需要以某種方式播出「我們正在取消 - 救助!」當在給定選項卡中一直彈出到根目錄VC時。在viewWillDisappear中檢查髒/新標誌作爲安全檢查也無濟於事,因爲在合法取消的情況下(即如果實際點擊取消按鈕),該測試將被調用兩次。

+0

啊哈。起初我以爲Categories是你的朋友,也許我可以在UIViewController上安裝一個,並在popToRootViewControllerAnimated中進行插入:提醒部隊。但是,這將需要子類化,而不是。 (儘可能避免在可可中進行子類化,但這可能不是那種可能的時代。)如果圍繞這個問題有一個較少熵的方法,那麼我全都是耳朵。 – 2010-05-10 15:23:39