SDCAlertView
SDCAlertView
started out as an alert that looked identical to UIAlertView
, but had support for a custom content view. With the introduction of UIAlertController
in iOS 8, the project was updated to the more modern API that UIAlertController
brought.
Features
- Most
UIAlertController
functionality - Custom content views
- Preventing controllers from dismissing when the user taps a button
- Easy presentation/dismissal
- Attributed title label, message label, and buttons
- Appearance customization
- Usable from Swift and Objective-C
- Understandable button placement
- UI tests
- Custom alert behavior
- CocoaPods/Carthage/Swift Package Manager support
- Easy queueing of alerts
Requirements
- Swift 5.0
- iOS 9 or higher
Installation
CocoaPods
To install SDCAlertView using CocoaPods, integrate it in your existing Podfile, or create a new Podfile:
platform :ios, '9.0'
use_frameworks!
target 'MyApp' do
pod 'SDCAlertView'
end
Then run pod install
.
Carthage
To install with Carthage, add the following line to your Cartfile
:
github "sberrevoets/SDCAlertView"
Run carthage update
and drag SDCAlertView.framework
in the Build
folder into your project.
Swift Package Manager
To install with Swift Package Manager, add this package to your project’s 'Swift Packages' section. Or add the following line to your Package.swift
:
.package(url: "https://github.com/sberrevoets/SDCAlertView.git", from: "12.0.1")
Alerts vs. Action Sheets
SDCAlertController
supports the presentation of action sheets, but there are some limitations and things to keep in mind when using action sheets:
- It does not properly adapt on iPad. This is because iOS doesn't support
UIModalPresentationStyle.Custom
for adaptive presentations (such as when presenting an action sheet from a bar button item). - The new
AlertBehaviors
is, due to limitations in the Swift/Objective-C interop, not available when usingSDCAlertController
from Swift. This affectsAlertControllerStyle.Alert
as well. - When adding subviews to the custom content view, that view will replace the title and message labels.
Usage
SDCAlertView
is written in Swift, but can be used in both Swift and Objective-C. Corresponding types in Objective-C have the same name they do in Swift, but with an SDC
prefix.
Basic
let alert = AlertController(title: "Title", message: "This is a message", preferredStyle: .alert)
alert.addAction(AlertAction(title: "Cancel", style: .normal))
alert.addAction(AlertAction(title: "OK", style: .preferred))
alert.present()
// or use the convenience methods:
AlertController.alert(withTitle: "Title", message: "This is a message", actionTitle: "OK")
AlertController.sheet(withTitle: "Action sheet title", "Action sheet message", actions: ["OK", "Cancel"])
Custom Content Views
let spinner = UIActivityIndicatorView(activityIndicatorStyle: .gray)
spinner.translatesAutoresizingMaskIntoConstraints = false
spinner.startAnimating()
let alert = AlertController(title: "Title", message: "Please wait...")
alert.contentView.addSubview(spinner)
spinner.centerXAnchor.constraint(equalTo: alert.contentView.centerXAnchor).isActive = true
spinner.topAnchor.constraint(equalTo: alert.contentView.topAnchor).isActive = true
spinner.bottomAnchor.constraint(equalTo: alert.contentView.bottomAnchor).isActive = true
alert.present()
Dismissal Prevention
let alert = AlertController(title: "Title", message: "This is a message")
alert.addAction(AlertAction(title: "Dismiss", style: .preferred))
alert.addAction(AlertAction(title: "Don't dismiss", style: .normal))
alert.shouldDismissHandler = { $0.title == "Dismiss" }
alert.present()
Styling and Appearance
SDCAlertController
is a normal view controller, so applying a tintColor
to its view
will color the buttons and any subviews you add to the contentView
.
If you are looking for more customizations, create a subclass of AlertVisualStyle
and use visualStyle
on the AlertController
instance. You can also create an instance of AlertVisualStyle
and overwrite the attributes you need (this is mainly intended to be used from Objective-C). Note that after an alert has been presented, changing any of these settings is ignored.
License
SDCAlertView is distributed under the MIT license.