2011-12-16 5 views
3

私は以下の問題があります:のpopViewControllerAnimated:(BOOL)animatedをオーバーライドしました。私はカスタムアニメーションを持ちたいからです。次のようにコードは次のとおりです。UINavigationBar popViewControllerアニメーションを防止する

- (UIViewController *)popViewControllerAnimated:(BOOL)animated 
{ 
    UIViewController *poppedCtrl = [super popViewControllerAnimated:NO]; 
    [((customViewController *) self.topViewController) doCustomAnimation]; 
    return poppedCtrl; 
} 

残念ながらUINavigationBarは、私が明示的にアニメーションに建てられ、それはまだアニメ化されて無効にすることを無視しているようです。

ナビゲーションバーのアニメーションも防止するにはどうすればよいですか?

答えて

11

いくつかの読書といくつかの実験の後に、私は最終的に、所望の挙動を達成するために何が必要かを見出しました。

ナビゲーションバーにアニメーションが表示されないようにするには、(UIViewController *)popViewControllerAnimated:(BOOL)animatedを上書きするだけでは不十分です。

カスタムナビゲーションバーを作成してオーバーライドすることも必要である(UINavigationItem *)popNavigationItemAnimated:(BOOL)animated:このカスタムナビゲーションバーも使用(私はちょうどで使用されるナビゲーションバーを置き換えられているものでなければなりません。もちろん

- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated { 
    return [super popNavigationItemAnimated:NO]; 
} 

インタフェースビルダーのナビゲーションコントローラ)。

+3

この動作はまたpushNavigationItemのために動作しない理由は何らかの理由が...? – horseshoe7

+0

素敵な仕事!私は、iOS 7ではバックボタンがまだ消えていることに気付きました - どのように瞬時に移行するのか? –

0

anyonesは、プッシュアニメーションを無効にするために探している場合 - これはUINavigationBarにこの方法をoverrideingことで、私の作品:

- (void)pushNavigationItem:(UINavigationItem *)item { 
    NSMutableArray* items = [[self items] mutableCopy]; 
    [items addObject:item]; 
    self.items = items; 
}