- iOS 11.0
 - Xcode 14.0
 - Swift 5
 
dependencies: [
    .package(url: "https://github.com/devpolant/NativeUI.git", .upToNextMajor(from: "1.2.2"))
]target 'MyApp' do
  pod 'NativeUI', '~> 1.2.2'
endIf you don't need to connect all UI components you may use subspecs like:
target 'MyApp' do
  pod 'NativeUI/Alert', '~> 1.2.2'
endAvailable subspecs:
UtilsAlert
AlertViewController is a customizable replacement for native UIAlertController.
Sometimes we need to set NSAttributedString into native alert, but public API doesn't allow it. As a workaroud we could use private API, but in general we should avoid using it.
AlertViewController looks exactly like native UIAlertController, but very configurable.
- Default initialization with title, message as 
String. 
let cancelAction = Alert.Action(title: "Cancel", style: .primary)
let confirmAction = Alert.Action(title: "Confirm", style: .default)
            
let viewModel = Alert(
    title: "Your Title",
    titleFont: ... // your custom title font
    message: "Your Message",
    messageFont: ... // your custom message font
    actions: [cancelAction, confirmAction]
)
let alert = AlertViewController(viewModel: viewModel)
present(alert, animated: true)- Default initialization with title, message as 
NSAttributedString 
let cancelAction = Alert.Action(title: "Cancel", style: .primary)
let confirmAction = Alert.Action(title: "Confirm", style: .default)
            
let viewModel = Alert(
    title: ... // your title (NSAttributedString)
    message: ... // your message (NSAttributedString)
    actions: [cancelAction, confirmAction]
)
let alert = AlertViewController(viewModel: viewModel)
present(alert, animated: true)- Initialization with title, message and custom 
UIViewobject as content view to implement complex layout. 
let cancelAction = Alert.Action(title: "Cancel", style: .primary)
let confirmAction = Alert.Action(title: "Confirm", style: .default)
let customView = CustomView()
customView.translatesAutoresizingMaskIntoConstraints = false
customView.imageView.backgroundColor = .orange
customView.titleLabel.text = "Some text"
customView.subtitleLabel.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
let viewModel = Alert(
    title: "Your Title",
    message: nil,
    contentView: customView,
    actions: [cancelAction, confirmAction]
)
let alert = AlertViewController(viewModel: viewModel)
present(alert, animated: true)See Alert.swift for more details.
When you need to present few alerts in a row you should set shouldDismissAutomatically flag to false and add action AFTER view controller initialization to be able to capture alert instance in action handler's closure.
let viewModel = Alert(
    title: "Your Title",
    message: "Your Message"
)
let alert = AlertViewController(viewModel: viewModel)
alert.shouldDismissAutomatically = false
let cancelAction = Alert.Action(title: "Cancel", style: .primary) { [weak alert] _ in
    alert?.dismiss(animated: true) {
        // present something else
    }
}
alert.addAction(cancelAction)
let confirmAction = Alert.Action(title: "Confirm", style: .default) { [weak alert] _ in
    alert?.dismiss(animated: true) {
        // present something else
    }
}
alert.addAction(confirmAction)
present(alert, animated: true)Anton Poltoratskyi
NativeUI is available under the MIT license. See the LICENSE file for more info.

