Lightweight pin code field library for iOS, written in Swift. This library also plays well with the all new iOS 12 one time password autofill.
Example |
With Cocoapods
pod 'KAPinField'
import KAPinField
class MyController : UIVIewController {
...
}
You can add an UITextField directly in your Storyboard scene and declare it as KAPinField
. It will automagically become a pin field. You can then customize it from the inspector view to suit your needs.
Don't forget to set the delegate likeso :
@IBOutlet var pinField: KAPinField!
override func viewDidLoad() {
super.viewDidLoad()
properties.delegate = self
...
}
One simple method will be called on your delegate
extension MyController : KAPinFieldDelegate {
func pinField(_ field: KAPinField, didFinishWith code: String) {
print("didFinishWith : \(code)")
}
}
All the logic properties are available in the KAPinFieldProperties
struct named properties
.
** Token can't be a whitespace due to Apple handling of trailing spaces. You can achieve the same effect using any token with tokenColor
and tokenFocusColor
set to .clear
**
pinField.updateProperties { properties in
properties.token = "-" // Default to "•", can't be a whitespace !
properties.numberOfCharacters = 5 // Default to 4
properties.validCharacters = "0123456789+#?" // Default to only numbers, "0123456789"
properties.text = "123" // You can set part or all of the text
properties.animateFocus = true // Animate the currently focused token
properties.isSecure = false // Secure pinField will hide actual input
properties.secureToken = "*" // Token used to hide actual character input when using isSecure = true
properties.isUppercased = false // You can set this to convert input to uppercased.
}
All the styling can be done via the KAPinFieldAppearance
struct named appearance
.
pinField.updateAppearence { appearance in
appearance.font = .menloBold(40) // Default to appearance.MonospacedFont.menlo(40)
appearance.kerning = 20 // Space between characters, default to 16
appearance.textColor = UIColor.white.withAlphaComponent(1.0) // Default to nib color or black if initialized programmatically.
appearance.tokenColor = UIColor.black.withAlphaComponent(0.3) // token color, default to text color
appearance.tokenFocusColor = UIColor.black.withAlphaComponent(0.3) // token focus color, default to token color
appearance.backOffset = 8 // Backviews spacing between each other
appearance.backColor = UIColor.clear
appearance.backBorderWidth = 1
appearance.backBorderColor = UIColor.white.withAlphaComponent(0.2)
appearance.backCornerRadius = 4
appearance.backFocusColor = UIColor.clear
appearance.backBorderFocusColor = UIColor.white.withAlphaComponent(0.8)
appearance.backActiveColor = UIColor.clear
appearance.backBorderActiveColor = UIColor.white
appearance.keyboardType = UIKeyboardType.numberPad // Specify keyboard type
}
A monospaced font is highly recommended in order to avoid horizontal offsetting during typing. For this purpose, a handy helper is available to allow you to access native iOS monospaced fonts.
To use it, just set appearance.font
with a enum value from appearance.MonospacedFont
.
You can of course still use your own font by setting the default font
property on KAPinField.
KAPinField
also provide some eye-candy for failure and success.
pinfield.animateSuccess(with: "👍") {
print("Success")
}
pinfield.animateFailure() {
print("Failure")
}