特定の機能を追加するために、システム クラス (具体的には UINavigationBar) をサブクラス化しました。UINavigationBar の代わりとして、私はこれをどこでも使用しています。ただし、システム フレームワークで使用される一部の UINavigationBars をカスタム サブクラスに置き換えて、同じ動作を提供したいと考えています。具体的には、UITabBarController の more ビュー コントローラーの UINavigationBar を自分のクラスのインスタンスにしたいと考えています。
これは無理だろうと思ったので、UINavigationBar にカテゴリを作成してみました。これはシステム内のあらゆる場所に伝播します。ただし、私のカテゴリでは、カスタムの初期化と破棄 (NSNotificationCenter の通知の購読と購読解除) を行う必要があります。カテゴリの init/dealloc メソッドを上書きすると、元のメソッド (UINavigationBar によって実装されている) を呼び出すことができなくなり、非常に危険/致命的/おそらくあまり機能しない可能性があります。
考えられる解決策の 1 つはメソッドのスウィズリングですが、その使用方法はよくわかりませんし、明らかに非常に複雑になる可能性があります。
私の問題を解決する何かを実装する方法 (またはメソッド スウィズリングを使用する方法のカスタム コード) を詳しく説明できる人がいれば、非常に感謝しています。