EZSwiftExtensions/Sources/UIApplicationExtensions.swift

46 lines
1.5 KiB
Swift

//
// UIApplicationExtensions.swift
// EZSwiftExtensions
//
// Created by Mousavian on 23/02/16.
// Copyright (c) 2016 Lucas Farah. All rights reserved.
//
#if os(iOS) || os(tvOS)
import UIKit
extension UIApplication {
/// EZSE: Run a block in background after app resigns activity
public func runInBackground(_ closure: @escaping () -> Void, expirationHandler: (() -> Void)? = nil) {
DispatchQueue.main.async {
let taskID: UIBackgroundTaskIdentifier
if let expirationHandler = expirationHandler {
taskID = self.beginBackgroundTask(expirationHandler: expirationHandler)
} else {
taskID = self.beginBackgroundTask(expirationHandler: { })
}
closure()
self.endBackgroundTask(taskID)
}
}
/// EZSE: Get the top most view controller from the base view controller; default param is UIWindow's rootViewController
public class func topViewController(_ base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let nav = base as? UINavigationController {
return topViewController(nav.visibleViewController)
}
if let tab = base as? UITabBarController {
if let selected = tab.selectedViewController {
return topViewController(selected)
}
}
if let presented = base?.presentedViewController {
return topViewController(presented)
}
return base
}
}
#endif