# LGAlertView Customizable implementation of UIAlertViewController, UIAlertView and UIActionSheet. All in one. You can customize every detail. Make AlertView of your dream! :) [![Platform](https://img.shields.io/cocoapods/p/LGAlertView.svg)](https://github.com/Friend-LGA/LGAlertView) [![CocoaPods](https://img.shields.io/cocoapods/v/LGAlertView.svg)](http://cocoadocs.org/docsets/LGAlertView) [![Carthage](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg)](https://github.com/Friend-LGA/LGAlertView) [![License](http://img.shields.io/cocoapods/l/LGAlertView.svg)](https://raw.githubusercontent.com/Friend-LGA/LGAlertView/master/LICENSE) ## Preview ### Default Alert View ### Default Action Sheet ### Blurred Alert View ### Blurred Action Sheet ### Custom Alert View ### Custom Action Sheet > Screenshots above are just few examples that you can achieve, you are free to create any other style ## Installation | LGAlertView version | iOS version | |---------------------|-------------| | <= 2.0.13 | >= 6.0 | | >= 2.1.0 | >= 8.0 | ### With source code [Download repository](https://github.com/Friend-LGA/LGAlertView/archive/master.zip), then add [LGAlertView directory](https://github.com/Friend-LGA/LGAlertView/blob/master/LGAlertView/) to your project. Then import header files where you need to use the library ##### Objective-C ```objective-c #import "LGAlertView.h" ``` ##### Swift For swift you need to create [bridging header](https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html) ```objective-c // BridgingHeader.h #import "LGAlertView.h" ``` ### With CocoaPods CocoaPods is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries in your projects. To install with cocoaPods, follow the "Get Started" section on [CocoaPods](https://cocoapods.org/). #### Podfile ```ruby platform :ios, '8.0' use_frameworks! pod 'LGAlertView' ``` Then import framework where you need to use the library ##### Objective-C ```objective-c #import // OR @import LGAlertView; ``` ##### Swift ```swift import LGAlertView ``` ### With Carthage Carthage is a lightweight dependency manager for Swift and Objective-C. It leverages CocoaTouch modules and is less invasive than CocoaPods. To install with carthage, follow the instruction on [Carthage](https://github.com/Carthage/Carthage/). #### Cartfile ``` github "Friend-LGA/LGAlertView" ``` Then import framework where you need to use the library ##### Objective-C ```objective-c #import // OR @import LGAlertView; ``` ##### Swift ```swift import LGAlertView ``` ## Usage ### Initialization You have several methods for initialization: ##### Objective-C ```objective-c - (nonnull instancetype)initWithTitle:(nullable NSString *)title message:(nullable NSString *)message style:(LGAlertViewStyle)style buttonTitles:(nullable NSArray *)buttonTitles cancelButtonTitle:(nullable NSString *)cancelButtonTitle destructiveButtonTitle:(nullable NSString *)destructiveButtonTitle; - (nonnull instancetype)initWithViewAndTitle:(nullable NSString *)title message:(nullable NSString *)message style:(LGAlertViewStyle)style view:(nullable UIView *)view buttonTitles:(nullable NSArray *)buttonTitles cancelButtonTitle:(nullable NSString *)cancelButtonTitle destructiveButtonTitle:(nullable NSString *)destructiveButtonTitle; - (nonnull instancetype)initWithActivityIndicatorAndTitle:(nullable NSString *)title message:(nullable NSString *)message style:(LGAlertViewStyle)style buttonTitles:(nullable NSArray *)buttonTitles cancelButtonTitle:(nullable NSString *)cancelButtonTitle destructiveButtonTitle:(nullable NSString *)destructiveButtonTitle; - (nonnull instancetype)initWithProgressViewAndTitle:(nullable NSString *)title message:(nullable NSString *)message style:(LGAlertViewStyle)style progressLabelText:(nullable NSString *)progressLabelText buttonTitles:(nullable NSArray *)buttonTitles cancelButtonTitle:(nullable NSString *)cancelButtonTitle destructiveButtonTitle:(nullable NSString *)destructiveButtonTitle; - (nonnull instancetype)initWithTextFieldsAndTitle:(nullable NSString *)title message:(nullable NSString *)message numberOfTextFields:(NSUInteger)numberOfTextFields textFieldsSetupHandler:(LGAlertViewTextFieldsSetupHandler)textFieldsSetupHandler buttonTitles:(nullable NSArray *)buttonTitles cancelButtonTitle:(nullable NSString *)cancelButtonTitle destructiveButtonTitle:(nullable NSString *)destructiveButtonTitle; ``` ##### Swift ```swift public init(title: String?, message: String?, style: LGAlertViewStyle, buttonTitles: [String]?, cancelButtonTitle: String?, destructiveButtonTitle: String?) public init(viewAndTitle title: String?, message: String?, style: LGAlertViewStyle, view: UIView?, buttonTitles: [String]?, cancelButtonTitle: String?, destructiveButtonTitle: String?) public init(activityIndicatorAndTitle title: String?, message: String?, style: LGAlertViewStyle, buttonTitles: [String]?, cancelButtonTitle: String?, destructiveButtonTitle: String?) public init(progressViewAndTitle title: String?, message: String?, style: LGAlertViewStyle, progressLabelText: String?, buttonTitles: [String]?, cancelButtonTitle: String?, destructiveButtonTitle: String?) public init(textFieldsAndTitle title: String?, message: String?, numberOfTextFields: UInt, textFieldsSetupHandler: LGAlertView.LGAlertViewTextFieldsSetupHandler?, buttonTitles: [String]?, cancelButtonTitle: String?, destructiveButtonTitle: String?) ``` More init methods you can find in [LGAlertView.h](https://github.com/Friend-LGA/LGAlertView/blob/master/LGAlertView/LGAlertView.h) ### Setup You can change properties only before you show alert view, after this to change something is impossible. ### Appearance Instead of change properties for every new alert view, you can use `appearance` to set them all only once and new alert views will use it by default: ##### Objective-C ```objective-c [LGAlertView appearance].tintColor = UIColor.greenColor; [LGAlertView appearance].cancelOnTouch = NO; [LGAlertView appearance].dismissOnAction = NO; [LGAlertView appearance]... [LGAlertView appearance]... ``` ##### Swift ```swift LGAlertView.appearance().tintColor = .green LGAlertView.appearance().cancelOnTouch = false LGAlertView.appearance().dismissOnAction = false LGAlertView.appearance()... LGAlertView.appearance()... ``` ### Buttons If you want to set properties for each button individually, you can use method: ##### Objective-C ```objective-c - (void)setButtonPropertiesAtIndex:(NSUInteger)index handler:(void(^ _Nonnull)(LGAlertViewButtonProperties * _Nonnull properties))handler; [alertView setButtonPropertiesAtIndex:0 handler:^(LGAlertViewButtonProperties * _Nonnull properties) { properties.titleColor = UIColor.yellowColor; properties.image = [UIImage imageNamed:@"SuperImage"]; // properties... // properties... }]; ``` ##### Swift ```swift open func setButtonPropertiesAt(_ index: UInt, handler: @escaping (LGAlertViewButtonProperties) -> Swift.Void) alertView.setButtonPropertiesAt(0) { (properties: LGAlertViewButtonProperties) in properties.titleColor = .yellow properties.image = UIImage(named: "SuperImage") // properties... // properties... } ``` #### Enable / Disable You can enable and disable buttons: ##### Objective-C ```objective-c alertView.cancelButtonEnabled = YES; alertView.destructiveButtonEnabled = YES; [alertView setButtonEnabled:YES atIndex:0]; ``` ##### Swift ```swift alertView.cancelButtonEnabled = true alertView.destructiveButtonEnabled = true alertView.setButtonEnabled(true, index: 0) ``` ### Retain Cycle When you use blocks and if you need to use `self` inside it, then you need to make weak reference to `self` to avoid retain cycle: ##### Objective-C ```objective-c __weak typeof(self) wself = self; alertView.cancelHandler = ^(LGAlertView *alertView) { __strong typeof(wself) sself = wself; [sself someMethod]; }; ``` ##### Swift ```swift alertView.cancelHandler = { [unowned self](alertView: LGAlertView) in self.someMethod() } ``` ### Blur You can use UIBlurEffect with next properties: ```objective-c UIBlurEffect *coverBlurEffect; ``` For example: ##### Objective-C ```objective-c alertView.coverBlurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleRegular]; ``` ##### Swift ```swift alertView.coverBlurEffect = UIBlurEffect(style: .regular) ``` If you want to change color of blurred view, use: ```objective-c UIColor *coverColor; ``` For example: ##### Objective-C ```objective-c alertView.coverColor = [UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:0.1]; ``` ##### Swift ```swift alertView.coverColor = UIColor(red: 0.0, green: 0.5, blue: 1.0, alpha: 0.1) ``` If you want to change intensity of blurred view, use: ```objective-c CGFloat coverAlpha; ``` For example: ```objective-c alertView.coverAlpha = 0.9; ``` ### Handle actions To handle actions you can use blocks, delegate or notifications: #### Delegate ##### Objective-C ```objective-c @optional - (void)alertViewWillShow:(nonnull LGAlertView *)alertView; - (void)alertViewDidShow:(nonnull LGAlertView *)alertView; - (void)alertViewWillDismiss:(nonnull LGAlertView *)alertView; - (void)alertViewDidDismiss:(nonnull LGAlertView *)alertView; - (void)alertView:(nonnull LGAlertView *)alertView clickedButtonAtIndex:(NSUInteger)index title:(nullable NSString *)title; - (void)alertViewCancelled:(nonnull LGAlertView *)alertView; - (void)alertViewDestructed:(nonnull LGAlertView *)alertView; - (void)alertView:(nonnull LGAlertView *)alertView didDismissAfterClickedButtonAtIndex:(NSUInteger)index title:(nullable NSString *)title; - (void)alertViewDidDismissAfterCancelled:(nonnull LGAlertView *)alertView; - (void)alertViewDidDismissAfterDestructed:(nonnull LGAlertView *)alertView; - (void)showAnimationsForAlertView:(nonnull LGAlertView *)alertView duration:(NSTimeInterval)duration; - (void)dismissAnimationsForAlertView:(nonnull LGAlertView *)alertView duration:(NSTimeInterval)duration; ``` ##### Swift ```swift optional public func alertViewWillShow(_ alertView: LGAlertView) optional public func alertViewDidShow(_ alertView: LGAlertView) optional public func alertViewWillDismiss(_ alertView: LGAlertView) optional public func alertViewDidDismiss(_ alertView: LGAlertView) optional public func alertView(_ alertView: LGAlertView, clickedButtonAtIndex index: UInt, title: String?) optional public func alertViewCancelled(_ alertView: LGAlertView) optional public func alertViewDestructed(_ alertView: LGAlertView) optional public func alertView(_ alertView: LGAlertView, didDismissAfterClickedButtonAtIndex index: UInt, title: String?) optional public func alertViewDidDismissAfterCancelled(_ alertView: LGAlertView) optional public func alertViewDidDismissAfterDestructed(_ alertView: LGAlertView) optional public func showAnimationsForAlertView(_ alertView: LGAlertView, duration: NSTimeInterval) optional public func dismissAnimationsForAlertView(_ alertView: LGAlertView, duration: NSTimeInterval) ``` #### Blocks ##### Objective-C ```objective-c void(^ _Nullable willShowHandler)(LGAlertView * _Nonnull alertView); void(^ _Nullable willShowHandler)(LGAlertView * _Nonnull alertView); void(^ _Nullable didShowHandler)(LGAlertView * _Nonnull alertView); void(^ _Nullable willDismissHandler)(LGAlertView * _Nonnull alertView); void(^ _Nullable didDismissHandler)(LGAlertView * _Nonnull alertView); void(^ _Nullable actionHandler)(LGAlertView * _Nonnull alertView, NSUInteger index, NSString * _Nullable title); void(^ _Nullable cancelHandler)(LGAlertView * _Nonnull alertView); void(^ _Nullable destructiveHandler)(LGAlertView * _Nonnull alertView); void(^ _Nullable didDismissAfterActionHandler)(LGAlertView * _Nonnull alertView, NSUInteger index, NSString * _Nullable title); void(^ _Nullable didDismissAfterCancelHandler)(LGAlertView * _Nonnull alertView); void(^ _Nullable didDismissAfterDestructiveHandler)(LGAlertView * _Nonnull alertView); void(^ _Nullable showAnimationsBlock)(LGAlertView * _Nonnull alertView, NSTimeInterval duration); void(^ _Nullable dismissAnimationsBlock)(LGAlertView * _Nonnull alertView, NSTimeInterval duration); ``` ##### Swift ```swift open var willShowHandler: ((alertView: LGAlertView) -> Swift.Void)? open var didShowHandler: ((alertView: LGAlertView) -> Swift.Void)? open var willDismissHandler: ((alertView: LGAlertView) -> Swift.Void)? open var didDismissHandler: ((alertView: LGAlertView) -> Swift.Void)? open var actionHandler: ((alertView: LGAlertView, index: NSUInteger, title: NSString) -> Swift.Void)? open var cancelHandler: ((alertView: LGAlertView) -> Swift.Void)? open var destructiveHandler: ((alertView: LGAlertView) -> Swift.Void)? open var didDismissAfterActionHandler: ((alertView: LGAlertView, index: NSUInteger, title: NSString) -> Swift.Void)? open var didDismissAfterCancelHandler: ((alertView: LGAlertView) -> Swift.Void)? open var didDismissAfterDestructiveHandler: ((alertView: LGAlertView) -> Swift.Void)? open var showAnimationsBlock: ((alertView: LGAlertView, duration: NSTimeInterval) -> Swift.Void)? open var dismissAnimationsBlock: ((alertView: LGAlertView, duration: NSTimeInterval) -> Swift.Void)? ``` #### Notifications ``` LGAlertViewWillShowNotification LGAlertViewDidShowNotification LGAlertViewWillDismissNotification LGAlertViewDidDismissNotification LGAlertViewActionNotification LGAlertViewCancelNotification LGAlertViewDestructiveNotification LGAlertViewDidDismissAfterActionNotification; LGAlertViewDidDismissAfterCancelNotification; LGAlertViewDidDismissAfterDestructiveNotification; LGAlertViewShowAnimationsNotification; LGAlertViewDismissAnimationsNotification; ``` ### More For more details try Xcode [Demo project](https://github.com/Friend-LGA/LGAlertView/blob/master/Demo) and see [LGAlertView.h](https://github.com/Friend-LGA/LGAlertView/blob/master/LGAlertView/LGAlertView.h) ## Frameworks If you like LGAlertView, check out my other useful libraries: * [LGSideMenuController](https://github.com/Friend-LGA/LGSideMenuController) iOS view controller, shows left and right views by pressing button or gesture. * [LGPlusButtonsView](https://github.com/Friend-LGA/LGPlusButtonsView) Customizable iOS implementation of Floating Action Button (Google Plus Button, fab). ## License LGAlertView is released under the MIT license. See [LICENSE](https://raw.githubusercontent.com/Friend-LGA/LGAlertView/master/LICENSE) for details.