62 lines
2.1 KiB
Swift
62 lines
2.1 KiB
Swift
|
//
|
||
|
// 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
|
||
|
}
|
||
|
}
|