Ecosyste.ms: Awesome

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

https://github.com/mshrwtnb/alrt

An easier constructor for UIAlertController. Present an alert from anywhere.
https://github.com/mshrwtnb/alrt

alert swift uialertaction uialertcontroller uialertview

Last synced: about 2 months ago
JSON representation

An easier constructor for UIAlertController. Present an alert from anywhere.

Lists

README

        

# ALRT



An easier constructor for UIAlertController. Present an alert from anywhere like this.

```swift
ALRT.create(.alert, title: "Alert?").addOK().addCancel().show()
```
## Table of Contents
- [Features](#features)
- [Requirements](#requirements)
- [Installation](#installation)
- [Usage](#usage)
- [License](#license)

## Features
* Chainable UIAlertController Setup Methods
* Support `.alert` and `.actionSheet` UIAlertController.Style
* Support `UITextfield` UIAlertAction(`.alert` only)
* Returns `Result` whether an alert is successfully displayed. In other words, [Unit Testable](https://github.com/mshrwtnb/ALRT/blob/master/Demo/DemoTests/DemoTests.swift).

## Requirements
* Xcode 10.2+
* Swift 5.0
* iOS 9.0+

## Installation
### Carthage
```
github "mshrwtnb/ALRT" ~> 1.3.7
```
### Cocoapods
```
pod repo update
pod 'ALRT', '~> 1.3.7'
```

## Usage
### Basics
#### `.alert`
```swift
import ALRT

// Instantiate an .alert-type UIAlertController with OK and Cancel actions. Finally, present the alert by calling `show()`.
ALRT.create(.alert, title: "Title", message: "Message").addOK().addCancel().show()
```

#### `.actionSheet`
```swift
// Instantiate an .actionSheet-type UIAlertController.
ALRT.create(.actionSheet, message: "Action Sheet")
.addAction("Option A")
.addAction("Option B")
.addDestructive("Destructive Option")
.show()
```

### Action Types
Each action comes with different `UIAlertAction.Style`.

```swift
ALRT.create(.alert, title: "Action Types?")
.addAction("πŸ‚") // .default if not specified
.addOK() // .default
.addCancel("❌") // .cancel
.addDestructive("πŸ’£") // .destructive
.show()
```

### Custom Title
OK and Cancel actions have default titles in English; "OK" and "Cancel".
Here, we're overriding the titles in Japanese.

```swift
ALRT.create(.alert, title: "Actions In Japanese?").addOK("γ‚ͺγƒΌγ‚±γƒΌ").addCancel("キャンセル").show()
```

### Action Handling
Each action has `handler` that is called when user taps the action.
The closure takes two parameters: `UIAlertAction` and `[UITextField]?`.
The former is self-explanatory.
The latter is present if text field(s) is/are added to the alert.

```swift
ALRT.create(.alert, title: "Action Handling")
.addOK() { action, textFields in
print("\(action.title!) tapped")
}
.show()
```

### Result Handling
`show()` has a completion handler that takes `Result`.
You can ensure if the alert was shown successfully or not. This is useful for unit tests.
```swift
ALRT.create(.alert, title: "Result Handling")
.addOK()
.show() { result in
switch result {
case .success:
print("Alert is successfully shown")
case .failure(let error):
print("Error occurred. \(error.localizedDescription)")
}
}
```

### TextField(s)
Textfield(s) can be added to an alert in an use-case such as login.

```swift
enum TextFieldIdentifier: Int {
case username
case password
}

ALRT.create(.alert, title: "Enter your credentials")
// Configure textfield
.addTextField { textfield in
textfield.placeholder = "Username"
textfield.tag = TextFieldIdentifier.username.rawValue
}
.addTextField() { textField in
textField.placeholder = "Password"
textField.isSecureTextEntry = true
textField.tag = TextFieldIdentifier.password.rawValue
}
// If an user selects "Login", textfields above are retrieved in the trailing closure. Distinguish one from another with a tag or identifier.
.addAction("Login") { _, textfields in
for textField in textfields ?? [] {
if let identifier = TextFieldIdentifier(rawValue: textField.tag) {
switch identifier {
case .username:
// Extract username
case .password:
// Extract password
}
}
}
}
.addCancel()
.show()
```

### Changing source ViewController to present from
Although ALRT can present an alert anywhere, you might want to specify a source view controller for some reason. This can be done easily by passing a view controller to `show()`.

```swift
ALRT.create(.alert, title: "Source?")
.addOK()
.show(self) // self = source view controller
```

### Default Configuration
Set default tintColor and titles for OK and Cancel buttons.

```swift
ALRT.defaultConfiguration = .init(
tintColor: UIColor.blue,
okTitle: "OKπŸ‘",
cancelTitle: "CancelπŸ‘Ž"
)
```

## License
ALRT is released under the MIT license. [See LICENSE](https://github.com/mshrwtnb/ALRT/blob/master/LICENSE) for details.