0

私は2つの方法を知っていますが、それぞれに独自の欠点があります。

皆さんは何か良い方法を知っていますか? (繰り返しますが、iOS 4.0+ と互換性のあるアプリが必要なため、iOS 4.0 用です)

みんなありがとう、

4

2 に答える 2

3

OS のバージョンに応じて、おそらく 2 つの方法が必要です。これは、5.0 以降では drawRect 関数が呼び出されないためです。代わりに、5.0 にはカスタム ナビゲーション バー用の独自のルーチンがあります。最終的に 4.0 と 5.0 の両方の方法を使用し、実行時にバージョンを判別して適切なバージョンを選択しました。

最初の方法に関しては、インターフェイス ビルダーが本当に必要な理由がわかりません。オブジェクトをプログラムでインスタンス化し、サブビューとして追加するだけです。Interface builder 自体は、それ以上のことはしません。それは、それらを処理するためのより便利な方法です。

于 2012-01-12T19:41:49.647 に答える
1

実際には、メソッドを入れ替えたり、カテゴリを追加したり、Interface Builder を使用したりする必要はありません。代わりに、サブクラスを作成して、クラスをカスタム サブクラスに変更するためにUINavigationBar使用できます。NSKeyedUnarchiverUINavigationController.navigationBar

+ (UINavigationController*)customizableNavigationControllerWithController:(UIViewController*)controller {

NSAssert(controller != nil, @"UINavigationController(CustomNavigationBar) customizableControllerWithController: controller can not be nil");

UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:nil] autorelease];

NSData *navControllerData = [NSKeyedArchiver archivedDataWithRootObject:navController];

NSKeyedUnarchiver *unarchiver = [[[NSKeyedUnarchiver alloc] initForReadingWithData:navControllerData] autorelease];

[unarchiver setClass:[CustomNavigationBar class] forClassName:@"UINavigationBar"];

UINavigationController *customizableNavController = [unarchiver decodeObjectForKey:@"root"];

customizableNavController.viewControllers = [NSArray arrayWithObject:controller];

return customizableNavController;

}

于 2012-01-28T11:24:41.673 に答える