- July 26, 2025
- Mins Read
An easier constructor for UIAlertController. Present an alert from anywhere like this.
ALRT.create(.alert, title: “Alert?”).addOK().addCancel().show()
.alert
and .actionSheet
UIAlertController.StyleUITextfield
UIAlertAction(.alert
only)Result
whether an alert is successfully displayed. In other words, Unit Testable.
github “mshrwtnb/ALRT” ~> 1.3.7
pod repo update
pod ‘ALRT’, ‘~> 1.3.7’
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()
// Instantiate an .actionSheet-type UIAlertController.
ALRT.create(.actionSheet, message: “Action Sheet”)
.addAction(“Option A”)
.addAction(“Option B”)
.addDestructive(“Destructive Option”)
.show()
Each action comes with different UIAlertAction.Style
.
ALRT.create(.alert, title: “Action Types?”)
.addAction(“🏂”) // .default if not specified
.addOK() // .default
.addCancel(“❌”) // .cancel
.addDestructive(“💣”) // .destructive
.show()
OK and Cancel actions have default titles in English; “OK” and “Cancel”. Here, we’re overriding the titles in Japanese.
ALRT.create(.alert, title: “Actions In Japanese?”).addOK(“オーケー”).addCancel(“キャンセル”).show()
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.
ALRT.create(.alert, title: “Action Handling”)
.addOK() { action, textFields in
print(“\(action.title!) tapped”)
}
.show()
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.
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) can be added to an alert in an use-case such as login.
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()
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()
.
ALRT.create(.alert, title: “Source?”)
.addOK()
.show(self) // self = source view controller
Set default tintColor and titles for OK and Cancel buttons.
ALRT.defaultConfiguration = .init(
tintColor: UIColor.blue,
okTitle: “OK👍”,
cancelTitle: “Cancel👎”
)
NavigationKit is a lightweight library which makes SwiftUI navigation super easy to use. 💻 Installation 📦 Swift Package Manager Using Swift Package Manager, add ...
An alternative SwiftUI NavigationView implementing classic stack-based navigation giving also some more control on animations and programmatic navigation. NavigationStack Installation ...
With SwiftUI Router you can power your SwiftUI app with path-based routing. By utilizing a path-based system, navigation in your app becomes ...
This package takes SwiftUI's familiar and powerful NavigationStack API and gives it superpowers, allowing you to use the same API not just ...