Core UI elements: protocols, views and helpers.
- InitializableView - protocol with methods that should be called in constructor methods of view.
- Animatable - protocol that ensures that specific type support basic animation actions.
- ActivityIndicator - basic activity indicator.
- ActivityIndicatorHolder - placeholder view, containing activity indicator.
- AlertLocalizationProvider - protocol that ensures that localization for alerts will be provided.
- AlertPresentable - protocol indicates that certain object can present alerts.
- AlertPresentationContext - protocol indicates that certain object can present alert on top of itself.
- UIKitAlertContext - helper to provide easy conformance of
UIViewControllertoAlertPresentationContext.
- DefaultAlertLocalizationProvider - default localization provider for alerts.
- AlertAction - representation of alert action
- AlertDescriptor - struct that holds all needed information to present alert
- AlertsFactory - factory to present alerts.
Use to present alerts in a few lines of code. Can be used for UIKit and SwiftUI
You can initialize
AlertsFactorywith your own LocalizationProvider or useDefaultAlertLocalizationProvider
The implementation of the protocol says that an alert can be shown from this object. Also there is a UIKitAlertContext protocol designed to make it easier to work with AlertPresentationContext protocol. By default, no changes need to be made for UIKit view controllers to make them conform to UIKitAlertContext.
// View controller that can present alerts.
class ViewController: UIViewController, UIKitAlerContext {
// Realization of the view controller
}The implementation of this protocol says that an alert can be shown from the context. By default, the standard UIAlertController conforms to the protocol. Accordingly, when using a custom alert, it must also conform to the protocol:
import PopupDialog
extension PopupDialog: AlertPresentable {
@discardableResult
public func configured(with configuration: AlertDescriptor) -> Self {
title = configuration.title
for action in configuration.actions {
addButton(DefaultButton(title: action.title, action: action.action))
}
return self
}
public func present(on context: AlertPresentationContext, completion: VoidClosure?) {
context.present(self, animated: true, completion: completion)
}
}// Presents alert
func presentAlert() {
factory
.alert(title: "Alert's title",
message: "Alert's message",
tint: .systemBlue,
actions: [
AlertAction(title: "Ok", style: .default, action: nil),
AlertAction(title: "Cancel", style: .cancel, action: nil)
])
.present(on: self)
}
// Presents sheet alert
func presentSheetAlert() {
factory
.sheetAlert(title: "Alert's title",
message: "Alert's message",
tint: .systemBlue,
actions: [
AlertAction(title: "Ok", style: .default, action: nil),
AlertAction(title: "Cancel", style: .cancel, action: nil)
])
.present(on: self)
}// Ok alert
func presentOkAlert() {
factory
.okAlert(title: "Title", message: "Message")
.present(on: self)
}
// Retry alert
func presentRetryAlert() {
factory
.retryAlert(title: "Title", message: "Message") { [weak self] in
self?.presentOkAlert()
}
.present(on: self)
}
// Dialogue alert
func presentDialogueAlert() {
factory
.dialogueAlert(title: "Title", message: "Message")
.present(on: self)
}You can install this framework as a target of LeadKit.