2012-11-01 62 views
1

我已經建立了一個委託我的UITabBarController,並具有以下的委託方法shouldSelectViewController UITabBarControllerDelegate方法的情況下正確執行:popToRootViewControllerAnimated不

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {  
     [self.navigationController popToRootViewControllerAnimated: YES]; 
     return NO; 
} 

方法火災的背景下,我一兩級別轉換爲表格視圖。根視圖控制器得到正確顯示,但導航欄不會被重置,並且仍然有一個「後退」按鈕從一個或兩個級別進入表視圖。 (上面的委託方法是我在應用程序中試圖做的簡化形式,但仍然存在問題。在我的應用程序中,當我返回到原始選項卡時,需要顯示根視圖,所以我試圖在離開之前彈出到根視圖)。

popToRootViewControllerAnimated not working correctly表明存在時滯問題,但這似乎並不是我的情況。我可以等待,只要我想做shouldSelectViewController和導航欄「後退」按鈕之前仍然搞砸了。

的代表是:

@interface BasicPlaceItemComment : UIViewController<UIAlertViewDelegate, UITabBarControllerDelegate> { 
    // data members ommitted 
} 

這是我得到了我所有的表視圖類。

回答

0

這個問題似乎是我UINavigationController的子類來解決不同的問題。當我刪除這個子類時,問題就消失了。也就是說,當我做popToRootViewController而沒有繼承UINavigationController時,「後退」按鈕不會再混亂了。然而,這引發了另一個問題。我是UINavigationController的子類,以解決UINavigationController and UINavigationBarDelegate.ShouldPopItem() with MonoTouch

中陳述的問題使用我的導航欄和我的標籤欄,我希望能夠發出一條消息「你確定要退出嗎?」在顯示視圖中的某些數據發生變化(從該視圖導航離開之前,並且可能取消從該視圖導航)的情況下按下後退按鈕(或另一個選項卡)時發出警報。

所以,雖然這是一個部分答案,但我的問題依然存在。當用戶鍵入後退按鈕或其他選項卡時,我仍然需要獲得控制權的方法。所以,我覺得我需要: 1)一個手段有一個不同的委託比UINavigationController的UINavigationBarDelegate方法shouldPopItem,或 2)一些手段子類UINavigationController,但沒有得到後退按鈕搞砸了,因爲目前正在發生,當我點擊一個選項卡並調用popToRootViewController。

進一步的想法?

更多關於12年11月3日

這不是UINavigationController的子類本身是造成問題。我無意中從我的代理方法返回NO。

// This method returns true when the navigation bar should pop an item 
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item { 

當我做了一個popToRootViewController。我現在已經在我的UINavigationController子類中的方法:

- (void) popToRoot { 
    regularPop = YES; 
    [self popToRootViewControllerAnimated: YES]; 
} 

導致shouldPopItem返回YES,這是我用的,而不是popToRootViewController。我的大部分問題都解決了!

0

您確定該方法處於正確的環境嗎? 誰符合TabBarDelegate?如果它是你的AppDelegate,那麼self.navigationController可能是零。 如果您使用TabBar並且您有多個導航控制器,那麼您可能會在錯誤的控制器上調用popToRootViewController。 嘗試插入這樣的:

NSLog(@"%@", self.navigationController); 

在你的方法開始,並確保你得到正確的導航控制器的地址。

發佈一些更多的代碼可能會有所幫助。

+0

作爲代表的類是: –

+0

謝謝!我現在已經明白了。請遵循! –

相關問題