Apple ドキュメントから、initWithNavigationBarClass:toolbarClass: メソッドを使用して、UiNavigationController を別の Uinavigationbar でインスタンス化できることを理解しています。カスタム UiNavigationBar サブクラスと IB を介してこれを正しく行うにはどうすればよいですか?
3 に答える
このように使用して、ナビゲーションコントローラーを初期化できます。
UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[CustomNavigationBar class] toolbarClass:nil];
CustomNavigationBarサブクラス化によって作成されたカスタム クラスを次に示しUINavigationBarます。UINavigationController のプロパティを使用して、viewcontrollers を設定できますsetViewControllers。
IBでこれを行いたい場合は、これを試してください。オブジェクトからナビゲーション バーを選択し、ID インスペクターでナビゲーション バーのカスタム クラスを選択します。

Interface Builder では、ナビゲーション コントローラー内のナビゲーション バーをクリックします。右側のパネルでそれを調べて、カスタム クラスをUINavigationBarカスタム サブクラスに変更します。
コードでは、ナビゲーション バー サブクラスのヘッダー ファイルをインポートしたことを確認し、次のような内容を記述します。
// This code assumes `MyCustomNavigationBar` is the name of your custom subclass, and that `viewController` is a UIViewController object created earlier.
// To create the containing navigation controller
UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[MyCustomNavigationBar class] toolbarClass:[UIToolbar class]];
// To set the root view controller in the navigation controller
navigationController.viewControllers = @[viewController];
上記のコードは、 UIKit にUINavigationController、サブクラス のナビゲーション バーを持つを作成するように通知しますMyCustomNavigationBar。次に、ルート ビュー コントローラーを変数に格納されているオブジェクトに設定しますviewController。
あなたの一般的なサブクラスのためにここでベンジャミン・メイヨーの答えをマッシュアップするだけです
- (UINavigationController *)initWithRootViewController:(UIViewController *)rootViewController navigationBarClass:(Class)navigationBarClass {
self = [super initWithNavigationBarClass:navigationBarClass toolbarClass:UIToolbar.class];
if (self) {
self.viewControllers = @[rootViewController];
}
return self;
}