0

私は 4 つの navControllers を持つタブ付きアプリケーションを持っています。これらはすべて同じ UINavigationBar (同じ色、同じボタン) を使用する必要があります。今、私はナビゲーションバーを一度だけ作成したい!

私の最初のアプローチは、UINavigationController をサブクラス化し、バーの色とボタンを変更し、それを AppDelegate の navControllers に使用することでしたが、ボタンが表示されず、UINavigationController をサブクラス化することは想定されていないとドキュメントに記載されていることがわかりました...

あなたは私を助けることができます?私はどこにもこれに対する解決策を見つけることができませんでした...

4

2 に答える 2

0

iOS 5 のみをターゲットにしている場合は、外観プロキシを使用できます。これにより、アプリケーション全体の UI 要素を 1 点でカスタマイズできます。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAppearance_Protocol/Reference/Reference.html

古いiOSでこれを行う必要がある場合、これを行うための本当に良い解決策はありません. here で説明されているメソッドスウィズリングを使用するアプローチがあります。

http://samsoff.es/posts/customize-uikit-with-method-swizzling

しかし、これは iOS 5 では機能しなくなりました。最善の方法は、iOS 5 の外観プロキシを使用し、古い iOS のメソッド スウィズリングのような回避策を使用することです。

編集:

アピアランス プロキシが利用可能な場合はそれを使用し、利用できない場合はメソッド スウィズリングを使用するコードを次に示します。

if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) {
    // iOS >= 5.0 -> Use Appearance API
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]];
}
else {
    // iOS < 5.0 -> Use Method Swizzling
    Method drawRectCustomBackground = class_getInstanceMethod([UINavigationBar class], @selector(drawRectCustomBackground:));
    Method drawRect = class_getInstanceMethod([UINavigationBar class], @selector(drawRect:));
    method_exchangeImplementations(drawRect, drawRectCustomBackground);
}

メソッドはのdrawRectCustomBackgroundカテゴリに実装されていますUINavigationBar

于 2012-09-08T13:24:51.623 に答える
0

内部に 4 つの配列を含むメイン ナビゲーション コントローラーを開始します。各配列には、NavigationBar の各タブに対して内部に 1 つの NavigationController があります。うまくいくと思います。

それが役に立てば幸い、

マリオ

于 2012-09-08T14:59:25.493 に答える