// // UIAlertControllerExtensions.swift // CapFinder // // Created by User on 23.03.18. // Copyright © 2018 User. All rights reserved. // import Foundation import UIKit extension UIAlertController { private struct AssociatedKeys { static var blurStyleKey = "UIAlertController.blurStyleKey" } public var blurStyle: UIBlurEffect.Style { get { return objc_getAssociatedObject(self, &AssociatedKeys.blurStyleKey) as? UIBlurEffect.Style ?? .extraLight } set (style) { objc_setAssociatedObject(self, &AssociatedKeys.blurStyleKey, style, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) view.setNeedsLayout() view.layoutIfNeeded() } } public var cancelButtonColor: UIColor? { return blurStyle == .dark ? UIColor(red: 28.0/255.0, green: 28.0/255.0, blue: 28.0/255.0, alpha: 1.0) : nil } private var visualEffectView: UIVisualEffectView? { if let presentationController = presentationController, presentationController.responds(to: Selector(("popoverView"))), let view = presentationController.value(forKey: "popoverView") as? UIView // We're on an iPad and visual effect view is in a different place. { return view.recursiveSubviews.compactMap({$0 as? UIVisualEffectView}).first } return view.recursiveSubviews.compactMap({$0 as? UIVisualEffectView}).first } private var cancelActionView: UIView? { return view.recursiveSubviews.compactMap({ $0 as? UILabel} ).first(where: { $0.text == actions.first(where: { $0.style == .cancel })?.title })?.superview?.superview } public convenience init(title: String?, message: String?, preferredStyle: UIAlertController.Style, blurStyle: UIBlurEffect.Style) { self.init(title: title, message: message, preferredStyle: preferredStyle) self.blurStyle = blurStyle } open override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() visualEffectView?.effect = UIBlurEffect(style: blurStyle) cancelActionView?.backgroundColor = cancelButtonColor } }