2012-05-10 49 views
9

方案在iPhone上:獲取UINavigationBar的委託,讓「回」,一個漂亮的動畫

用戶點擊後退按鈕時,UINavigationBar委託方法(在UINavigationController一個子類實現)返回YES,就像這樣:現在

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item 
{ 
    // Verify stuff... 

    return YES; 
} 

,根據docs,它是應用程序的職責,以保持導航欄和同步內容,並做到這一點的地方是在委託方法

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item 

問題是,didPopItem僅在導航欄的流行動畫序列完成後調用,因此如果我在那裏調用[self popViewControllerAnimated: NO],最終結果是導航欄首先滑回,然後是內容。

而這只是看起來不對。

如果我在代理shouldPop...方法中調用導航控制器的pop...,則會收到一條錯誤消息,表明我是重疊的動畫,並且最終狀態不乾淨。

所以我的問題是,是否有另一種方式讓UINavigationController更改內容,最好是與導航欄同步的動畫效果最好,但不會在導航欄和導航控制器之間造成混淆?

目標操作系統是iOS 4.2及更高版本。

我知道我可以在後退按鈕的位置創建另一個左按鈕,但是我發現使用委託更加清潔,而且我得到了一個「真正的」後退按鈕,這正是我想要的。

+0

Ÿü希望之前的導航欄的彈出動畫序列調用didPopItem方法爲u曾在3 paragrah..Whatü瓦納做u能請writter它清除你的第三次低谷你認爲你的主要佇列 –

+1

爲什麼你用一個單獨的導航欄和'UINavigationController'而不是使用它提供的? – Greg

回答

3

如果您使用的是UINavigationController,則不需要自己管理它。只需使用UINavigationController就可以節省很多麻煩。它將負責管理內容視圖以及導航欄項目。

1

試試這個:

想象一下你有viewControllerA和viewControllerB。 viewControllerA是第一個,不需要navigationBar和viewControllerB。

論viewControllerA方法viewWillAppear把代碼:

[self.navigationController setNavigationBarHidden:YES animated:YES]; 

和彈出的viewControllerB當你與動畫這樣做。這兩個動畫將自動同步。

不知道這是否是有效的iOS4.2