2
2

More than 3 years have passed since last update.

Android, iOSでダイアログが表示されているか確認する方法

Last updated at Posted at 2020-04-22

Android

アプリがフォアグランドにいる時にActivityのフォーカスが失われたら、ダイアログが表示されたと判断する

class MainActivity : AppCompatActivity() {

    var isDialogVisible = false

    override fun onWindowFocusChanged(hasFocus: Boolean) {
        super.onWindowFocusChanged(hasFocus)
        if (hasFocus) {
            isDialogVisible = false
        } else {
            if (lifecycle.currentState == Lifecycle.State.RESUMED) {
                // アプリがフォアグランドにいる時にフォーカスが失われたら、ダイアログが表示されたと判断する
                isDialogVisible = true
            }
        }
    }

iOS

最前面のViewControllerが UIAlertControllerであれば、ダイアログが表示されていると判断する

AppDelegate.swift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var isDialogVisible: Bool {
        guard let topVC = UIApplication.topViewController() else { return false }
        if topVC is UIAlertController {
            return true
        }
        return false
    }
}
UIApplication+.swift

import UIKit

extension UIApplication {

    class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let navigationController = controller as? UINavigationController {
            return topViewController(controller: navigationController.visibleViewController)
        }
        if let tabController = controller as? UITabBarController {
            if let selected = tabController.selectedViewController {
                return topViewController(controller: selected)
            }
        }
        if let presented = controller?.presentedViewController {
            return topViewController(controller: presented)
        }
        return controller
    }
}
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2