Code Monkey home page Code Monkey logo

genericpasswordrow's Introduction

GenericPasswordRow

Build status Platform iOS Swift 2 compatible Carthage compatible CocoaPods compatible License: MIT

By Xmartlabs SRL.

Contents

Introduction

GenericPasswordRow is a custom row for Eureka designed to create passwords. Its main purpose is to guide users through this process according to a set of validations.

  • Features
    • Visibility
    • Password strength
    • Hints

Usage

import GenericPasswordRow

class ViewController: FormViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        form +++ Section()
            <<< GenericPasswordRow()
    }
}

Requirements

  • iOS 8.0+
  • Xcode 7.3+

Getting involved

  • If you want to contribute please feel free to submit pull requests.
  • If you have a feature request please open an issue.
  • If you found a bug or need help please check older issues, FAQ and threads on StackOverflow (Tag 'CreditCardRow') before submitting an issue..

Before contribute check the CONTRIBUTING file for more info.

If you use GenericPasswordRow in your app we would love to hear about it! Drop us a line on twitter.

Examples

Follow these steps to run Example project:

  • Clone GenericPasswordRow repository
  • Open terminal in the downloaded folder and run bin/setup script
  • Open GenericPasswordRow workspace
  • Run the Example project.

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects.

To install GenericPasswordRow, simply add the following line to your Podfile:

pod 'GenericPasswordRow', '~> 1.0'

Carthage

Carthage is a simple, decentralized dependency manager for Cocoa.

To install GenericPasswordRow, simply add the following line to your Cartfile:

github "EurekaCommunity/GenericPasswordRow" ~> 1.0

Customization

For basic styling like fonts, colors, margins, separators you should use cellSetup and cellUpdate. Otherwise, you should be able to provide a completely different design (different nib file) and reuse the already implemented logic.

GenericPasswordRow parameters

  • var passwordValidator: PasswordValidator = DefaultPasswordValidator(): a PasswordValidator intended to define the rules to be satisfied by the password. See Implement custom validation
  • var placeholder: String? = "Password": placeholder of password textfield.

For example you can do this:

<<< GenericPasswordRow() {
      $0.passwordValidator = // instantiate your custom validator
      $0.placeholder = "Create a password"
  }

GenericPasswordCell parameters:

  • @IBOutlet weak var textField: UITextField!:
    Password textfield.
  • @IBOutlet weak var visibilityButton: UIButton?:
    Visibility button intended to toggle the secureTextEntry property of textField.
  • @IBOutlet weak var passwordStrengthView: PasswordStrengthView?:
    A subclass of PasswordStrengthView with the custom design of the strength indicator. See PasswordStrengthView
  • @IBOutlet weak var hintLabel: UILabel?:
    Label used to show hints to the user while typing his password.
  • var visibilityImage: (on: UIImage?, off: UIImage?):
    Images to be set to the visibilityButton depending on the textField's secureTextEntry state.
  • var dynamicHeight = (collapsed: UITableViewAutomaticDimension, expanded: UITableViewAutomaticDimension):
    Heights of the cell when collapsed (with hintLabel hidden) and expanded (hintLabel not hidden). This property is nib-specific.

Creating custom nib file

You might want to follow your own design. To accomplish this you should follow these steps:

  • Create a user interface xib file and edit it with Xcode's Interface Builder. You should add a simple UITableViewCell and say that its class is a GenericPasswordCell.

  • Add an UITextField for the password entry and connect it to the textField outlet.

  • [optional] Add an UIButton and connect it to the visibilityButton.

  • [optional] Add a PasswordStrengthView subclass and connect it to the passwordStrengthView outlet.

  • [optional] Add an UILabel and connect it to the hintLabel outlet.

  • Specify that you want to use the newly created nib file. You can do this in two ways:

    • Using RowDefaults: use this if you want to use only this custom GenericPasswordRow in your app.
     GenericPasswordRow.defaultRowInitializer = {
             $0.cellProvider = CellProvider<GenericPasswordCell>(nibName: "MyPasswordCell", bundle: nil)
         }
    • Or create a custom row subclassing _GenericPasswordRow:
     final class MyPasswordRow: _GenericPasswordRow, RowType {
         required init(tag: String?) {
             super.init(tag: tag)
             cellProvider = CellProvider<GenericPasswordCell>(nibName: "MyPasswordCell", bundle: nil)
         }
     }

Custom Strength View

If you are providing a custom nib file, you can also provide a custom subclass of PasswordStrengthView different from the DefaultPasswordStrengthView. You just need to implement the following methods:

class PasswordStrengthView: UIView {

    public func setPasswordValidator(validator: PasswordValidator) { }
    public func updateStrength(password password: String, animated: Bool = true) { }

}

Custom Password Validation

In order to provide a custom password validation you need to provide a conformance to the PasswordValidator protocol at the passwordValidator property of the GenericPasswordRow instance.

protocol PasswordValidator {

    var maxStrength: Double { get }
    func strengthForPassword(password: String) -> Double
    func hintForPassword(password: String) -> String?
    func isPasswordValid(password: String) -> Bool
    func colorsForStrengths() -> [Double: UIColor]

}

This validator should define the strength of any given password between zero and maxStrength values. Also, the func colorsForStrengths() -> [Double: UIColor] function should return a dictionary specifying key points of strength values and the associated color starting from there. See DefaultPasswordValidator.

Author

What is on the roadmap?

What could be added to GenericPasswordRow:

  • Implement some Eureka Validation
  • Provide additional subclasses of PasswordStrengthView

Change Log

This can be found in the CHANGELOG.md file.

genericpasswordrow's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.