Latest 2.0.1
Homepage https://github.com/polydice/ICInputAccessory
License MIT
Platforms ios 8.0, requires ARC
Authors ,

Customized text fields used in the iCook app.

Build Status
Carthage compatible
CocoaPods Compatible
Platform
Swift 4.1

KeyboardDismissTextField

  • A text field that has a button to dismiss keyboard on the input accessory view.

TokenField

  • A horizontal scrolling UI that groups input texts.
  • Easy to add, select and delete tokens.
  • Customizable icon and colors.
  • Supports storyboard.

ICTokenField

OptionPickerControl

  • An easy to use UIControl that displays a UIPickerView with given options.

Requirements

ICInputAccessory iOS Xcode Swift
~> 1.0.0 8.0+ 7.2 Swift 2.1.1
~> 1.1.0 8.0+ 7.3 Swift 2.2
~> 1.2.0 8.0+ 8.0 Swift 2.3
~> 1.3.0 8.0+ 8.0 Swift 3.0
~> 1.4.0 8.0+ 8.3 Swift 3.1
~> 1.5.0 8.0+ 9.3 Swift 4.1
~> 2.0.0 8.0+ 10.0 Swift 4.1

Installation

Use Carthage

Create a Cartfile with the following specification and run carthage update ICInputAccessory. Follow the instructions to add the framework to an iOS project.

github "polydice/ICInputAccessory"

Use CocoaPods

ICInputAccessory supports subspecs. Create a Podfile with the following specification and run pod install.

platform :ios, '8.0'
use_frameworks!

pod 'ICInputAccessory/TokenField'
pod 'ICInputAccessory/KeyboardDismissTextField'

Use Git Submodule

git submodule add -b master [email protected]:polydice/ICInputAccessory.git Dependencies/ICInputAccessory
  • Everything you need resides in the Source directory. Add those files to your project.
  • Alternatively, drag ICInputAccessory.xcodeproj to your app project as a subproject. Add ICInputAccessory-iOS to the Target Dependencies in the application target’s Build Phases settings.

Usage

KeyboardDismissTextField

let textField = KeyboardDismissTextField(frame: rect)

TokenField

let tokenField = TokenField(frame: rect)
tokenField.delegate = self as? TokenFieldDelegate

The characters that complete a token:

/// Characters that complete a new token, defaults are whitespace and commas.
public var delimiters: [String]

Tokens:

/// Texts of each created token.
public var texts: [String] { get }

/// Creates a token with the current input text.
public func completeCurrentInputText()

/// Removes the input text and all displayed tokens.
public func resetTokens()

UI customization:

/// The image on the left of text field.
public var icon: UIImage? { get set }

/// The placeholder with the default color and font.
public var placeholder: String? { get set }

/// The placeholder with customized attributes.
public var attributedPlaceholder: NSAttributedString? { get set }

/// Customized attributes for tokens in the normal state, e.g. .font and .foregroundColor.
public var normalTokenAttributes: [NSAttributedStringKey : NSObject]? { get set }

/// Customized attributes for tokens in the highlighted state.
public var highlightedTokenAttributes: [NSAttributedStringKey : NSObject]? { get set }

Customizable properties in storyboard:

@IBInspectable var icon: UIImage?
@IBInspectable var placeholder: String?
@IBInspectable var textColor: UIColor?
@IBInspectable var cornerRadius: CGFloat

See Example/CustomizedTokenField.swift for more details.

TokenFieldDelegate

TokenField currently notifies its delegate the following events:

@objc optional func tokenFieldDidBeginEditing(_ tokenField: TokenField)
@objc optional func tokenFieldDidEndEditing(_ tokenField: TokenField)
@objc optional func tokenFieldWillReturn(_ tokenField: TokenField)
@objc optional func tokenField(_ tokenField: TokenField, didChangeInputText text: String)
@objc optional func tokenField(_ tokenField: TokenField, shouldCompleteText text: String) -> Bool
@objc optional func tokenField(_ tokenField: TokenField, didCompleteText text: String)
@objc optional func tokenField(_ tokenField: TokenField, didDeleteText text: String, atIndex index: Int)

The displayed delimiter string can be customized by:

@objc optional func tokenField(_ tokenField: TokenField, subsequentDelimiterForCompletedText text: String) -> String

OptionPickerControl

An example type that conforms to OptionDescriptive:

extension String: OptionDescriptive {

  var title: String {
    return self
  }

  static var titleForOptionalValue: String {
    return "(optional)"
  }

}

To initialize OptionPickerControl with CGRect.zero and add it to the view hierarchy:

let optionPicker = OptionPickerControl<String>()
optionPicker.options = [.optional, Option("Option 1"), Option("Option 2")]
optionPicker.addTarget(self, action: #selector(didChangeOption(_:)), for: .valueChanged)
view.addSubview(optionPicker)

To show the UIPickerView:

optionPicker.becomeFirstResponder()

Documentation

Development

  • Set up dependencies by running the following command in the project root:

    make bootstrap
  • Open ICInputAccessory.xcworkspace and run the demo app with the Example scheme.

  • See more tasks for building and testing:

    rake -T

Contributing

Thank you for being interested in contributing to this project. We’d love to hear your ideas!

Please fork this repository, create a branch named like feature/some-new-feature and send us a pull request to make this project better.

Contact

Twitter
Join the chat at https://gitter.im/polydice/ICInputAccessory

License

Copyright (c) 2016 Polydice, Inc.

ICInputAccessory is released under the MIT license. See LICENSE for details.

Latest podspec

{
    "name": "ICInputAccessory",
    "version": "2.0.1",
    "summary": "A customized token text field used in the iCook app.",
    "description": "KeyboardDismissTextField:n* An input accessory view with a button to dismiss keyboard.nnTokenField:n* A horizontal scrolling UI that groups input texts.n* Easy to add, select and delete tokens.n* Customizable icon and colors.n* Supports storyboard.nnOptionPickerControl:n* An easy to use UIControl that displays a UIPickerView with given options.",
    "screenshots": [
        "https://raw.githubusercontent.com/polydice/ICInputAccessory/master/screenshots/ICTokenField.png",
        "https://raw.githubusercontent.com/polydice/ICInputAccessory/master/screenshots/ICKeyboardDismissTextField.png"
    ],
    "homepage": "https://github.com/polydice/ICInputAccessory",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": [
        "bcylin",
        "trisix"
    ],
    "platforms": {
        "ios": "8.0"
    },
    "swift_version": "4.0",
    "source": {
        "git": "https://github.com/polydice/ICInputAccessory.git",
        "tag": "v2.0.1"
    },
    "requires_arc": true,
    "default_subspecs": [
        "KeyboardDismissTextField",
        "OptionPickerControl",
        "TokenField"
    ],
    "subspecs": [
        {
            "name": "KeyboardDismissTextField",
            "source_files": "Source/KeyboardDismissTextField/*.swift",
            "resources": "Source/KeyboardDismissTextField/*.xcassets"
        },
        {
            "name": "OptionPickerControl",
            "source_files": "Source/OptionPickerControl/*.swift"
        },
        {
            "name": "TokenField",
            "source_files": "Source/TokenField/*.swift"
        }
    ]
}

Pin It on Pinterest

Share This