Skip to content

jakubpetrik/AnyFormatKit

 
 

Repository files navigation

AnyFormatKit: Simple text formatting in Swift

CI Status Version Carthage Compatible License Platform Swift

Text formatting framework written on Swift 4.0.

Features

Features
🎭 Convert string into formatted string and vice versa
🚴 Formatting text during typing
#️⃣ Set format using '#' characters like '### ##-###'
📎 Set prefix for editing string
🙈 Symbols input control with RegEx
🌐 Works with textField/textView/etc with common interface
🎁 Ready to use subclasses of UITextField and UITextView
🔍 Allows easy to set attributes for string in range

Example

To run the example project, clone the repo and run pod install from the Example directory first.

Phone number example

AnyFormatKitDemo: Simple text formatting in Swift

Currency example

AnyFormatKitCurrencyDemo: Currency formatting in Swift

Requirements

  • iOS 8.0+
  • Swift 4.0+
  • Xcode 9.0+

Installation

CocoaPods

AnyFormatKit is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'AnyFormatKit'

Then, run the following command:

$ pod install

Carthage

To integrate AnyFormatKit into your Xcode project using Carthage, specify it in your Cartfile:

github "luximetr/AnyFormatKit" ~> 0.1.1

Run carthage update to build the framework and drag the built AnyFormatKit.framework into your Xcode project.

Usage

Import

import AnyFormatKit

Formatting with TextFormatter

let phoneFormatter = TextFormatter(textPattern: "### (###) ###-##-##")
phoneFormatter.formattedText(from: "+123456789012") // +12 (345) 678-90-12

let customFormatter = TextFormatter(textPattern: "###-###custom###-###")
customFormatter.formattedText(from: "111222333444") // 111-222custom333-444

You can also set your own symbol in the pattern

let cardFormatter = TextFormatter(textPattern: "XXXX XXXX XXXX XXXX", patternSymbol: "X")
cardFormatter.formattedText(from: "4444555566667777") // 4444 5555 6666 7777

For string with different length

let formatter = TextFormatter(textPattern: "## ###-##")
formatter.formattedText(from: "1234") // 12 34
formatter.formattedText(from: "123456789") // 12 345-67

Unformatting

let formatter = TextFormatter(textPattern: "## ###-##")
formatter.unformattedText(from: "99 888-77") // 9988877

Formatting during typing

It is necessary to create TextInputController instance with formatter for formatting during typing. You need to implement TextInput protocol in your own UITextField/UITextView/something else or use ready solutions (TextInputField/TextInputView) by subclassing. It is necessary to set controllers's textInput property.

let textInputController = TextInputController()

let textInput = TextInputField() // or TextInputView or any TextInput
textInputController.textInput = textInput // setting textInput

let formatter = TextInputFormatter(textPattern: "### (###) ###-##-##", prefix: "+12")
textInputController.formatter = formatter // setting formatter

The controller listens textInput(_:shouldChangeCharactersIn:replacementString:) delegate method. But you can also add more than one delegate if needed. Methods of the delegates, that should return Bool value gather using && operator. Therefore, if one of the delegates returns false, that means that textInput will receive false. If you want to send true to textInput, all delegates must return true.

You can set allowedSymbolsRegex to the formatter to filter input symbols with the RegEx. All symbols, that satisfy the RegEx will be available for typing in the textInput. This property only applies to inputed symbols from the keyboard, but not to the prefix.

inputFieldFormatter.allowedSymbolsRegex = "[0-9]" // allowed only numbers

Attributes for range

To set attributes for string at range use addAttributes(_:range:) method for textInput.

textInput.addAttributes([.foregroundColor : UIColor.lightGray], range: NSRange(location: 0, length: 3))

Author

luximetr, [email protected]

License

AnyFormatKit is available under the MIT license. See the LICENSE file for more info.

About

Simple text formatting in Swift

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Swift 98.6%
  • Other 1.4%