46 lines
1.5 KiB
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
|