Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/Friend-LGA/LGAlertView

Customizable implementation of UIAlertViewController, UIAlertView and UIActionSheet. All in one. You can customize every detail. Make AlertView of your dream! :)
https://github.com/Friend-LGA/LGAlertView

action-sheet actionsheet alert-view alert-view-controller alertview alertviewcontroller carthage cocoapods ios lgalertview objective-c swift

Last synced: 3 months ago
JSON representation

Customizable implementation of UIAlertViewController, UIAlertView and UIActionSheet. All in one. You can customize every detail. Make AlertView of your dream! :)

Awesome Lists containing this project

README

        

# 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.