私は他の開発者が使用するiOS静的ライブラリを設計しています。このライブラリは、独自のモーダルUIを提供する必要があります。私は、これを達成するためにアプリケーションとこのライブラリとの間のインターフェイスを設計する最も簡単な方法を探しています。私は、iOS 4.0以上をサポートする必要があります。独自のモーダルUIを提供するiOS静的ライブラリを設計する最も簡単な方法は何ですか?
ラフアーキテクチャ
私の静的ライブラリは、一つのクラスと非常にシンプルなAPIを持っています。アプリケーションのAppDelegateは、この1つのクラスをインスタンス化し、通知を受信できるように自身をデリゲートとして設定します。アプリケーションでライブラリにUIが表示されるようにするには、単一のメソッドが呼び出されます。ライブラリがその作業を完了すると、デリゲートプロトコルのメソッドの1つを使用して通知が送信されます。
これを達成するには2つの方法があります。
オプションアプリケーションがそのUIを表示するライブラリを望んでいる1
は、AppDelegateはself.windowに渡し、ライブラリが効果的にUIの完全な所有権を取って、独自のルートビューコントローラを設定します。 UIが終了すると、AppDelegateはAppDelegateに自身のルートビューコントローラを設定し、UIの所有権を取り戻します。
オプション2
ライブラリは、アプリケーションが、それが好きどのビュースタックにプッシュすることができるビューコントローラを公開します。 UIが終了したことをライブラリが通知すると、View Controllerも削除されます。オプション1で
問題
は、アプリケーションを実行しているの真ん中にしながら、ルートビューコントローラを変更する問題がある可能性があります。オプション2を使用すると、任意のコンテキスト(UINavigationControllerのサブビューとしてフル・ウィンドウ・ビュー・コントローラなど)で動作するビュー・コントローラを提供する際に問題が発生することがあります。
両方のオプションのもう1つの問題は、applicationWillResignActive:やapplicationDidBecomeActive:など、AppDelegateが受け取る可能性のある他のUIApplicationDelegate通知です。ライブラリはUIを適切に維持するために通知を処理する必要があります。 AppDelegateは、UIがアクティブなときに、これらをライブラリに渡す必要がありますか?
私が考えていないより良いオプション3がありますか?
このコードをNSObjectクラスに書く必要がありますか? –
これに入れるクラスはすべて、NSObjectの子孫ですObjectiveCコードでなければならないので、私はあなたの質問を理解しているか分からない。これは2年以上経過しているため、まだ有効かどうかはわかりません。 – Dad
あなたのコードがうまくいきました。私のコードでは間違いでした。素晴らしいコードそれは多くの時間を節約.. –