背景
iOSアプリ向けのSDKを開発する場合、アプリの画面上にポップアップやダイアログ等のViewを表示したい場合があります。その場合、現在表示されているViewControllerにviewをaddSubViewする方法が考えられますが、SDK開発の場合はアプリ側の実装を知ることができないため、ViewControllerにアクセスするためにやや特殊な手法を用いる必要があります。
手法
下記のようにUIApplicationからrootViewControllerにアクセスすることで、現在表示されているViewControllerを取得することができます。
func getTopViewController() -> UIViewController? {
if let rootViewController = UIApplication.shared.keyWindow?.rootViewController {
var topViewController: UIViewController = rootViewController
while let presentedViewController = topViewController.presentedViewController {
topViewController = presentedViewController
}
return topViewController
} else {
return nil
}
}
ViewControllerを取得したら、下記のようにaddSubViewすることで画面上に任意のViewを表示させることができるでしょう。
if let topViewController: UIViewController = getTopViewController() {
topViewController.view.addSubview(customView)
}