| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- //
- // UIViewController.swift
- //
- // Created by Nathan Racklyeft on 1/16/16.
- // Copyright © 2016 Nathan Racklyeft. All rights reserved.
- //
- import UIKit
- extension UIViewController {
- /**
- Convenience method to present an alert controller on the active view controller
-
- - parameter title: The title of the alert
- - parameter message: The message of the alert
- - parameter animated: Whether to animate the alert
- - parameter completion: An optional closure to execute after the presentation finishes
- */
- public func presentAlertControllerWithTitle(_ title: String?, message: String, animated: Bool = true, completion: (() -> Void)? = nil) {
- let alert = UIAlertController(
- title: title,
- message: message,
- preferredStyle: .alert
- )
-
- let action = UIAlertAction(
- title: LocalizedString("com.loudnate.LoopKit.errorAlertActionTitle", tableName: "LoopKit", value: "OK", comment: "The title of the action used to dismiss an error alert"),
- style: .default,
- handler: nil
- )
-
- alert.addAction(action)
- alert.preferredAction = action
-
- presentViewControllerOnActiveViewController(alert, animated: animated, completion: completion)
- }
-
- /**
- Convenience method to display an error object in an alert controller
-
- - parameter error: The error to display
- - parameter animated: Whether to animate the alert
- - parameter completion: An optional closure to execute after the presentation finishes
- */
- public func presentAlertControllerWithError(_ error: Error, animated: Bool = true, completion: (() -> Void)? = nil) {
-
- // See: https://forums.developer.apple.com/thread/17431
- // The compiler automatically emits the code necessary to translate between any ErrorType and NSError.
- let castedError: NSError = error as NSError
- presentAlertControllerWithTitle(error.localizedDescription,
- message: castedError.userInfo[NSLocalizedRecoverySuggestionErrorKey] as? String ?? String(describing: error),
- animated: animated,
- completion: completion
- )
- }
-
- /**
- Convenience method to present a view controller on the active view controller.
-
- If the receiver is not in a window, or already has a presented view controller, this method will
- attempt to find the most appropriate view controller for presenting.
-
- - parameter viewControllerToPresent: The view controller to display over the view controller’s content
- - parameter animated: Whether to animate the presentation
- - parameter completion: An optional closure to execute after the presentation finishes
- */
- public func presentViewControllerOnActiveViewController(_ viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)?) {
- var presentingViewController: UIViewController? = self
-
- if presentingViewController?.view.window == nil {
- presentingViewController = UIApplication.shared.delegate?.window??.rootViewController
- }
-
- while presentingViewController?.presentedViewController != nil {
- presentingViewController = presentingViewController?.presentedViewController
- }
-
- presentingViewController?.present(viewControllerToPresent, animated: animated, completion: completion)
- }
- }
|