2012-02-21 10 views
1

私は自分のアプリのルートとしてナビゲーションコントローラを持っており、外観プロキシを使用してiOS 5の外観をカスタマイズしていますが、iOS 4ではカテゴリを使用してdrawRectをオーバーライドしたいと考えていました:ただし、すべてのナビゲーションバーはカテゴリから予期されるように影響を受けていました。カスタムNavigationBar

私はMail作者やSMS作曲家のような "システム"ポップアップを改ざんしたくないので、彼らのバーは青色でシステムのようにしたい。

私自身のUINavigationControllerをxibで作成しようとしましたが、NavigationBarのクラスをUINavigationBarのカスタムサブアースに変更しようとしました。しかし結果は画面上では全く影響を及ぼさない。

私は次の記事について認識していますが、期待どおりの解決策を得ることができませんでした。方法:

_myNavigationController = [[UINavigationController alloc] initWithRootViewController:someVC]; 

if([[BT_NavigationController class] respondsToSelector:@selector(appearance)]){ 

    // some iOS 5 magic in here ! 
    [_myNavigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"topbar.png"]; 

}else{ 

    // Probably looking at app store refusal 
    CustomBar * bar = [[CustomBar alloc] init]; 
    // [_myNavigationController setNavigationBar: bar]; 
    [bar release]; 

} 

[parentView presentModalViewController:_myNavigationController animated:YES]; 

は、ナビゲーションバーのクラスを再割り当て、私はまたのためのXIBを持っていたUINavigationControllerを作成することを回避するために作業を行いますが、文書化されていないsetNavigationBarを使用しています How to subclass UINavigationBar for a UINavigationController programmatically?

私の最初の試み私のカスタムクラスには、drawRect:メソッドにブレークポイントを配置すると、私はこれが呼び出されていないことがわかります。

なぜ、私のコードがペン先をロードしていないと思われるので、ナーブバーが私のカスタムクラスであり、UINavigationBarではないことを認識していないようです。

ヒントをお寄せいただきありがとうございます。

答えて

2

あなたの変更だけで、画像を追加することについて、あなたは、単にビューコントローラからそれを挿入することができている場合は、カスタマイズしたい:

UIImageView *bgImageView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"topbar.png"]] autorelease]; 
[self.navigationController.navigationBar addSubview:bgImageView]; 

をあなたは、あなたが持っている他のどのような要素に基づいて少し微調整する必要があり、あなたのあなたのUIImageViewがサブビューの最も低いインデックスになるが、バックグラウンドの上にあるUINavigationBar。私たちのために働いた。

幸運。

+0

Navコントローラにこれを設定すると、その後の詳細ビューのバータイトルとバーボタンがイメージの後ろに配置されているようです。 – Daniel

+0

navigationBarでsendSubviewToBack :(またはinsertSubview:atIndex :)を使用する必要があります。ナビゲーションバーのサブビューによって異なります。 – teriiehina

関連する問題