KAPinField

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.

Basic use iOS12 autofill

Install

With Cocoapods
pod 'KAPinField'

Usage

import KAPinField

class MyController : UIVIewController {
  ...
}

Storyboard

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.

Delegation

Don't forget to set the delegate likeso :


@IBOutlet var pinField: KAPinField!

override func viewDidLoad() {
        super.viewDidLoad()
        pinField.pinDelegate = self
        ...
}

One simple method will be called on your delegate

extension MyController : KAPinFieldDelegate {
  func pinField(_ field: KAPinField, didFinishWith code: String) {
    print("didFinishWith : \(code)")
  }
}

Properties

pinField.token = "△" // Default to "•"
pinField.numberOfCharacters = 5 // Default to 4
pinField.validCharacters = "0123456789+#?" // Default to only numbers, "0123456789"
pinField.pinText = "123" // You can set part or all of the pin text

Styling

You can use the native defaultTextAttributes to style KAPinField.
It's highly recommended to use one of iOS monospaced fonts to avoid weird text offset while editting the field.

let paragraph = NSMutableParagraphStyle()
paragraph.alignment = .center
let attributes : [NSAttributedString.Key : Any] = [
    .paragraphStyle : paragraph,
    .font : UIFont(name: "Menlo-Regular", size: 40)!,
    .kern : 14,
    .foregroundColor : UIColor.white]
pinField.defaultTextAttributes = attributes

Animation

KAPinField also provide some eye-candy for failure and success.

Success
field.animateSuccess(with: "?") {
    print("Success")
}
Failure
field.animateFailure() {
   print("Failure")
}

GitHub