Popularity
3.7
Stable
Activity
0.0
Stable
177
8
39

Code Quality Rank: L5
Programming language: Swift
License: MIT License
Tags: UI     Form & Settings    
Latest version: v3.1.0

GenericPasswordRow alternatives and similar libraries

Based on the "Form & Settings" category.
Alternatively, view GenericPasswordRow alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of GenericPasswordRow or a related project?

Add another 'Form & Settings' Library

README

GenericPasswordRow

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 Eureka
import GenericPasswordRow

class ViewController: FormViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

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

Requirements

  • iOS 9.0+
  • Xcode 11.5+
  • Eureka ~> 5.2.1

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 'GenericPasswordRow') before submitting an issue..

Before contribute check the [CONTRIBUTING](CONTRIBUTING.md) 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', '~> 3.1'

Carthage

Carthage is a simple, decentralized dependency manager for Cocoa.

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

github "EurekaCommunity/GenericPasswordRow" ~> 3.1

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](Sources/DefaultPasswordStrengthView.swift). 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](Sources/DefaultPasswordValidator.swift).

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](CHANGELOG.md) file.


*Note that all licence references and agreements mentioned in the GenericPasswordRow README section above are relevant to that project's source code only.