2010-12-28 8 views
6

"ブラックボックス"ライブラリを作成しています。このライブラリでは、私のライブラリを使用するすべてのアプリケーションにサブビューを追加する必要があります。
したがって、appDelegateやアプリケーションのUIWindowへの参照はありません。
外部アプリが今やっている唯一のものは以下の通りであるRECはブラックボックスのライブラリであるとmyRecは、外部アプリで使われているインスタンスです
アプリケーションオブジェクトを保持せずに現在アクティブなUIWindow/appDelegateオブジェクトを取得する

myRec = [[Rec alloc] init]; 
myRec.delegate = self; 
[myRec start]; 


もちろん、私は外部アプリケーションの特定のタイプのように定義されていないので、デリゲートメンバを介してアプリケーションのビューへの参照を取得することはできません。

UIWindowオブジェクト/ appDelegateオブジェクトを把握する方法については、事前にのアイデンティティーを知らないでください。

ありがとうございます!

答えて

20

アプリの委任行き方:

id<UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate]; 

UIWindowオブジェクトの取得:phix23彼の答え@

UIWindow* window = [[UIApplication sharedApplication] keyWindow]; 
+0

ありがとう!いいね ! – Guys

+0

ありがとうございました!チャームのように働く! –

1
[[UIApplication sharedApplication] delegate] 

は、常に何かがところでid<UIApplicationDelegate>

に準拠して返しますが、これはそれは、あなたのアプリケーション内のいくつかのクラスは(すなわちappDelegate)に準拠するようになっているプロトコルを作成して行うための適切な方法であり、そのクラスをあなたの図書館に渡してください。ライブラリは、クラスがプロトコルに準拠しているかどうかをチェックし、そうでなければログ内のメッセージで失敗します。

0

スウィフト3:

if let appDelegate = UIApplication.shared.delegate, let window = appDelegate.window { 
    let yourview = window?.rootViewController?.view 
} 
関連する問題