A simple country picker for iOS with elegant design
CountryPicker
Very simple country picker for iOS with elegant design. It uses unicode for country flags.
Screenshots
Requirements
- iOS 12+
- Xcode 12+
- Swift 5.3+
Installation
Currently CountryPicker is only avaliable via SPM. You can also add manually to your project.
SPM
If you have already Swift package set up, add CountryPicker as a dependency to your dependencies in your Package.swift
file.
dependencies: [
.package(url: "https://github.com/mobven/CountryPicker.git")
]
Usage
UIKit
Simply, you present CountryPickerViewController
. You can set default country for the picker with selectedCountry
variable (Default value is “TR”). To get informed about country selection, you should conform to CountryPickerDelegate
in your UIViewController
.
let countryPicker = CountryPickerViewController()
countryPicker.selectedCountry = "TR"
countryPicker.delegate = self
self.present(countryPicker, animated: true)
SwiftUI
To present CountryPickerViewController
on SwiftUI, you need to create a CountryPicker
representable. Check docs/SwiftUI out for details.
CountryPickerDelegate
Delegate method will be called with country selection, you can update your outlets with new selected country model.
extension ViewController: CountryPickerDelegate {
func countryPicker(didSelect country: Country) {
countryTextField.text = country.isoCode.getFlag() + " " + country.localizedName
}
}
Customization
Default picker theme is supporting Dark Mode for iO13+ devices. You can easly customize the picker with editing Configuration
properties. If you are adding custom colors, you should add dark appearance color for dark mode support.
public protocol Configuration {
var countryNameTextColor: UIColor { get set }
var countryNameTextFont: UIFont { get set }
var selectedCountryCodeBackgroundColor: UIColor { get set }
var selectedCountryCodeTextColor: UIColor { get set }
var selectedCountryCodeCornerRadius: CGFloat { get set }
var countryCodeFont: UIFont { get set }
var countryCodeTextColor: UIColor { get set }
var closeButtonTextColor: UIColor { get set }
var closeButtonFont: UIFont { get set }
var closeButtonText: String { get set }
var titleTextColor: UIColor { get set }
var titleFont: UIFont { get set }
var titleText: String { get set }
var searchBarPlaceholder: String { get set }
var searchBarBackgroundColor: UIColor { get set }
var searchBarPlaceholderColor: UIColor { get set }
var searchBarFont: UIFont { get set }
var searchBarLeftImage: UIImage? { get set }
var searchBarClearImage: UIImage? { get set }
var searchBarCornerRadius: CGFloat { get set }
var separatorColor: UIColor { get set }
}
Example
You can customize properties like this,
CountryManager.shared.config.countryNameTextColor = .black
CountryManager.shared.config.countryNameTextFont = UIFont.systemFont(ofSize: 16)
or you can create your own Config
let configMaker = Config(
countryNameTextColor: .black,
countryNameTextFont: UIFont.systemFont(ofSize: 16),
selectedCountryCodeBackgroundColor: .green
)
CountryManager.shared.config = configMaker()
Custom UI
getCountries()
method in CountryManager
will return a Country
array for you, so you can create your own custom UI implementations with this array.
let countries = CountryManager.shared.getCountries()
Flags
CountryPicker
uses unicode for country flags. You can use with iso codes like the example below.
label.text = "US".getFlag()
Localization
CountryPicker
is use current NSLocale
for localization of country name, you can set custom locale before presenting picker.
CountryManager.shared.localeIdentifier = "en_US"
let countryPicker = CountryPickerViewController()
self.present(countryPicker, animated: true)
For page title and close button text you can set localized text with Configration
properties
CountryManager.shared.config.titleText = "Country Picker"
CountryManager.shared.config.closeButtonText = "Close"
CountryPicker
v1.0.0 is support RTL except displaying localized phone codes.
What’s next
- Sample Project.
- SwiftUI representable code example.
- Support below iOS 13.