Advanced usage of native UIAlertController with TextField, TextView, DatePicker, PickerView, TableView, CollectionView and MapView. It supports Arabic countries.
Features
Custom pickers based on UITextField, UITextView, UIDatePicker, UIPickerView, UITableView, UICollectionView and MKMapView.
Example using a Storyboard.
Easy contentViewController placement.
Attributed title label and message label.
Button customization: image and title color.
Understandable action button placement.
Easy presentation.
Pure Swift 5.
Arabic countries.
Picker view with search bar.
Usage
New Alert
let alert = UIAlertController(style: .alert, title: "Title", message: "Message")
// or
let alert = UIAlertController(style: .alert)
// show alert
alert.show()
// or show alert with options
alert.show(animated: true, vibrate: true) {
// completion handler
}
Set Content ViewController
When setting your own custom UIViewController into UIAlertController keep in mind to set prefferedContentSize.height of the controller otherwise it will no effect. You can not set prefferedContentSize.width.
let alert = UIAlertController(style: .alert, title: "Title")
let vc = CustomViewController()
vc.preferredContentSize.height = height
alert.setValue(vc, forKey: "contentViewController")
alert.show()
// or
let alert = UIAlertController(style: .alert, title: "Title")
let vc = CustomViewController()
alert.set(vc: vc, height: height)
alert.show()
Pickers
For UX better to use .actionSheet style in UIAlertController when set picker into contentViewController. If you like you can use .alert style as well, buy .actionSheet style is wider and User can see more as well as action button is placing at bottom that also more convenience for User to touch it.
UITextField
In native UIAlertController you can only add UITextField to .alert style with default style and you can not change such properties as .borderColor, .borderWidth, .frame.size and so on. But if you make your own UIViewController with UITextField, it will solve all these problems.
One TextField Picker
You can use both styles .alert and .actionSheet of UIAlertController.
let alert = UIAlertController(style: .actionSheet, message: "Select Country")
alert.addLocalePicker(type: .country) { info in
// action with selected object
}
alert.addAction(title: "OK", style: .cancel)
alert.show()
Phone Code Picker
let alert = UIAlertController(style: .actionSheet, title: "Phone Codes")
alert.addLocalePicker(type: .phoneCode) { info in
// action with selected object
}
alert.addAction(title: "OK", style: .cancel)
alert.show()
Currency Picker
let alert = UIAlertController(style: .actionSheet, title: "Currencies")
alert.addLocalePicker(type: .currency) { info in
alert.title = info?.currencyCode
alert.message = "is selected"
// action with selected object
}
alert.addAction(title: "OK", style: .cancel)
alert.show()
Image Picker
Horizontal Image Picker with paging and single selection:
let alert = UIAlertController(style: .actionSheet)
let photos: [UIImage] = images
alert.addImagePicker(
flow: .horizontal,
paging: true,
images: photos,
selection: .single(action: { [unowned self] image in
// action with selected image
}))
alert.addAction(title: "OK", style: .cancel)
alert.show()
Vertical Image Picker w/o paging and with multiple selection:
let alert = UIAlertController(style: .actionSheet)
let photos: [UIImage] = images
alert.addImagePicker(
flow: .vertical,
paging: false,
height: UIScreen.main.bounds.height,
images: photos,
selection: .multiple(action: { [unowned self] images in
// action with selected images
}))
alert.addAction(title: "OK", style: .cancel)
alert.show()
PhotoLibrary Picker
let alert = UIAlertController(style: .actionSheet)
alert.addPhotoLibraryPicker(
flow: .horizontal,
paging: true,
selection: .single(action: { image in
// action with selected image
}))
alert.addAction(title: "Cancel", style: .cancel)
alert.show()
ColorPicker
Example how to use UIViewController instantiated from Storyboard with Autolayout as contentViewController in the UIAlertController.
let alert = UIAlertController(style: .actionSheet)
alert.addColorPicker(color: color) { color in
// action with selected color
}
alert.addAction(title: "Done", style: .cancel)
alert.show()
Contacts Picker
let alert = UIAlertController(style: .actionSheet)
alert.addContactsPicker { contact in
// action with contact
}
alert.addAction(title: "Cancel", style: .cancel)
alert.show()
Location Picker
let alert = UIAlertController(style: .actionSheet)
alert.addLocationPicker { location in
// action with location
}
alert.addAction(title: "Cancel", style: .cancel)
alert.show()
Telegram Picker
let alert = UIAlertController(style: .actionSheet)
alert.addTelegramPicker { result in
switch result {
case .photo(let assets):
// action with assets
case .contact(let contact):
// action with contact
case .location(let location):
// action with location
}
}
alert.addAction(title: "Cancel", style: .cancel)
alert.show()
Alerts & Pickers
Advanced usage of native UIAlertController with TextField, TextView, DatePicker, PickerView, TableView, CollectionView and MapView. It supports Arabic countries.
Features
Usage
Set Content ViewController
When setting your own custom
UIViewController
intoUIAlertController
keep in mind to setprefferedContentSize.height
of the controller otherwise it will no effect. You can not setprefferedContentSize.width
.Pickers
For UX better to use
.actionSheet
style inUIAlertController
when set picker intocontentViewController
. If you like you can use.alert
style as well, buy.actionSheet
style is wider and User can see more as well as action button is placing at bottom that also more convenience for User to touch it.UITextField In native UIAlertController you can only add
UITextField
to.alert
style with default style and you can not change such properties as.borderColor
,.borderWidth
,.frame.size
and so on. But if you make your ownUIViewController
withUITextField
, it will solve all these problems.One TextField Picker
You can use both styles
.alert
and.actionSheet
ofUIAlertController
.Two TextFields Picker
You can use both styles
.alert
and.actionSheet
ofUIAlertController
.DatePicker
UIDatePicker
does not look very much in.alert
style.PickerView
Example how to use
UIPickerView
ascontentViewController
and change height of theUIAlertController
.Locale Pickers
Country Picker
Phone Code Picker
Currency Picker
Image Picker
PhotoLibrary Picker
ColorPicker
Example how to use UIViewController instantiated from Storyboard with Autolayout as
contentViewController
in theUIAlertController
.Contacts Picker
Location Picker
Telegram Picker
TextViewer
Alerts vs. Action Sheets
There are some things to keep in mind when using
.actionSheet
and.alert
styles:.actionSheet
style.UITextField
can be used in both styles.Installing
CocoaPods
Manually
Download and drop
/Source
folder in your project.Requirements
Authors
Communication
License
This project is licensed under the MIT License.