SwiftAlertView 2.2.1

SwiftAlertView 2.2.1

TestsTested
LangLanguage SwiftSwift
License MIT
ReleasedLast Release Jan 2022
SPMSupports SPM

Maintained by Quan Dinh.



  • By
  • Dinh Quan

SwiftAlertView

A powerful customizable Alert View library written in Swift.

SwiftAlertView is the best alternative for UIAlertController and SwiftUI alert. With SwiftAlertView, you can easily make your desired Alert View in some lines of code.

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects. To integrate SwiftAlertView into your Xcode project using CocoaPods, specify it in your Podfile:

pod 'SwiftAlertView', '~> 2.2.1'

Carthage

Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate SwiftAlertView into your Xcode project using Carthage, specify it in your Cartfile:

github "https://github.com/dinhquan/SwiftAlertView" ~> 2.2.1

Swift Package Manager

The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler.

Once you have your Swift package set up, adding SwiftAlertView as a dependency is as easy as adding it to the dependencies value of your Package.swift.

dependencies: [
    .package(url: "https://github.com/dinhquan/SwiftAlertView", .upToNextMajor(from: "2.2.1"))
]

Manually

Drag and drop the file named SwiftAlertView inside Source in your project and you are done.

Highlight Features

  • Change the alert background color, background image, border radius.
  • Change the title font, color, margin, visibility.
  • Change the message font, color, margin, visibility.
  • Change the button font, color.
  • Change the alert appearance behaviour.
  • Add text fields (like UIAlertController)
  • Support dark mode
  • Initialize the alert view with a custom view.
  • Initialize the alert view with a xib file.
  • Callbacks for handling button touched events.
  • And many more ...

Usage

Showing an alert

SwiftAlertView.show(title: "Title", message: "Message", buttonTitles: "Cancel", "OK")

Customization

SwiftAlertView.show(title: "Title",
                    message: "Message",
                    buttonTitles: "OK", "Cancel") { alert in
    alert.backgroundColor = .yellow
    alert.cancelButtonIndex = 1
    alert.buttonTitleColor = .blue
}

Handle button clicked events

SwiftAlertView.show(title: "Title",
                    message: "Message",
                    buttonTitles: "OK", "Cancel") {
    $0.style = .dark
}
.onButtonClicked { _, buttonIndex in
    print("Button Clicked At Index \(buttonIndex)")
}

Add text fields

SwiftAlertView.show(title: "Sign in", buttonTitles: "Cancel", "Sign In") { alertView in
    alertView.addTextField { textField in
        textField.placeholder = "Username"
    }
    alertView.addTextField { textField in
        textField.placeholder = "Password"
    }
    alertView.isEnabledValidationLabel = true
    alertView.isDismissOnActionButtonClicked = false
}
.onActionButtonClicked { alert, buttonIndex in
    let username = alert.textField(at: 0)?.text ?? ""
    if username.isEmpty {
        alert.validationLabel.text = "Username is incorrect"
    } else {
        alert.dismiss()
    }
}
.onTextChanged { _, text, index in
    if index == 0 {
        print("Username text changed: ", text ?? "")
    }
}

You can show alert with custom content view

// with xib file
SwiftAlertView.show(nibName: "CustomView", buttonTitles: "OK")

// with custom UIView
SwiftAlertView.show(contentView: customView, buttonTitles: "OK")

Programmatically creating an alert

Initialize an alert

let alertView = SwiftAlertView(title: "Title", message: "Message", buttonTitles: "Cancel", "Button 1", "Button 2", "Button 3")

let alertView = SwiftAlertView(contentView: customView, buttonTitles: "OK")

let alertView = SwiftAlertView(nibName: "CustomView", buttonTitles: "OK")

Show or dismiss

// Show at center of screen
alertView.show()

// Show at center of a view
alertView.show(in: view)

// Programmatically dismiss the alert view
alertView.dismiss()

Handle button clicked event

alertView.onButtonClicked = { buttonIndex in
    print("Button Clicked At Index \(buttonIndex)")
}
alertView.onCancelButtonClicked = {
    print("Cancel Button Clicked")
}
alertView.onActionButtonClicked = { buttonIndex in
    print("Action Button Clicked At Index \(buttonIndex)")
}

If you don't want to use closures, make your view controller conform SwiftAlertViewDelegate and use delegate methods:

alertView.delegate = self

func alertView(_ alertView: SwiftAlertView, clickedButtonAtIndex buttonIndex: Int) {
    println("Button Clicked At Index \(buttonIndex)")
}

func didPresentAlertView(_ alertView: SwiftAlertView) {
    println("Did Present Alert View")
}

func didDismissAlertView(_ alertView: SwiftAlertView) {
    println("Did Dismiss Alert View")
}

Customization

SwiftAlertView can be customized with the following properties:

public var style: Style = .auto // default is based on system color

public var titleLabel: UILabel! // access titleLabel to customize the title font, color
public var messageLabel: UILabel! // access messageLabel to customize the message font, color

public var backgroundImage: UIImage?
// public var backgroundColor: UIColor? // inherits from UIView

public var cancelButtonIndex = 0 // default is 0, set this property if you want to change the position of cancel button
public var buttonTitleColor = UIColor(red: 0, green: 0.478431, blue: 1, alpha: 1) // to change the title color of all buttons
public var buttonHeight: CGFloat = 44.0

public var separatorColor = UIColor(red: 196.0/255, green: 196.0/255, blue: 201.0/255, alpha: 1.0) // to change the separator color
public var isHideSeparator = false
public var cornerRadius: CGFloat = 12.0

public var isDismissOnActionButtonClicked = true // default is true, if you want the alert view will not be dismissed when clicking on action buttons, set this property to false
public var isHighlightOnButtonClicked = true
public var isDimBackgroundWhenShowing = true
public var isDismissOnOutsideTapped = false
public var dimAlpha: CGFloat = 0.4
public var dimBackgroundColor: UIColor? = .init(white: 0, alpha: 0.4)

public var appearTime = 0.2
public var disappearTime = 0.1

public var transitionType: TransitionType = .default

// customize the margin & spacing of title & message
public var titleSideMargin: CGFloat = 20.0
public var messageSideMargin: CGFloat = 20.0
public var titleTopMargin: CGFloat = 20.0
public var messageBottomMargin: CGFloat = 20.0
public var titleToMessageSpacing: CGFloat = 20.0

// customize text fields
public var textFieldHeight: CGFloat = 34.0
public var textFieldSideMargin: CGFloat = 15.0
public var textFieldBottomMargin: CGFloat = 15.0
public var textFieldSpacing: CGFloat = 10.0
public var isFocusTextFieldWhenShowing = true
public var isEnabledValidationLabel = false
public var validationLabel: UILabel! // access to validation label to customize font, color
public var validationLabelTopMargin: CGFloat = 8.0
public var validationLabelSideMargin: CGFloat = 15.0

Contributing

Contributions for bug fixing or improvements are welcomed. Feel free to submit a pull request. If you have any questions, feature suggestions or bug reports, please send me an email to [email protected].