Giter Site home page Giter Site logo

reusableviews's Introduction

ReusableViews

CI Status Version License Platform

Why?

This extension package solves the following problems:

  • Forces your team to adhere to standard practices by:
    • Making storyboard identifiers the same as their class names
    • Making UITableViewCell and UICollectionViewCell reuse identifiers the same as their class name
    • Making UICollectionView supplementary views and UITableViewHeaderFooterView reuse identifiers the same as their class name
  • Removes the need to force unwrap or force cast cells/headers as you dequeue
  • Removes the need to force unwrap or force cast UIViewControllers as you instantiate them from a storyboard

If you're a user of SwiftLint, you'll greatly appreciate the reduced number of warnings and no more need for snippets in the vein of:

guard let cell = tableView.dequeueReusableCell(withIdentifier: "...", for: indexPath) as? MyCustomCellType else {
  fatalError("We didn't get the cell")
}

Example

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

Convenient Instantiation of a View From a Nib

Requires that your view conforms to NibLoadableView.

let view = MyNibLoadableView.create()

Instantiation of a UIViewController From a Storyboard

Requires that a class has the same storyboard identifier as its class name.

let myStoryboard: UIStoryboard = ...
let myCustomViewController = myStoryboard.instantiateViewControllerOfType(MyCustomViewController.self) as MyCustomViewController

Dequeueing and Registering a UITableViewCell

Requires that a class has the same reuse identifier as its class name. You must register your cell type first.

// Registration
tableView.register(MyCustomCellType.self)

// Dequeueing
let cell = tableView.dequeueReusableCell(for: indexPath) as MyCustomCellType

Dequeueing and Registering a UICollectionViewCell

Requires that a class has the same reuse identifier as its class name. You must register your cell type first.

// Registration
collectionView.register(MyCustomCellType.self)

// Dequeueing
let cell = collectionView.dequeueReusableCell(for: indexPath) as MyCustomCellType

Dequeueing and Registering a UITableViewHeaderFooterView

Requires that a class has the same reuse identifier as its class name. You must register your cell type first.

// Registration
tableView.register(MyCustomHeaderFooterView.self)

/// Dequeueing
let header = tableView.dequeueReusableHeaderFooterView(inSection: section) as MyCustomHeaderFooterView

Dequeueing and Registering a UICollectionView Supplementary View

Requires that a class has the same reuse identifier as its class name. You must register your view type first.

// Registration
collectionView.register(MyCustomSupplementaryView.self, forSupplementaryViewElementOfKind: .sectionHeader) // or .sectionFooter

// Dequeueing
let view = collectionView.dequeueReusableSupplementaryView(ofKind: .sectionHeader, for: indexPath) as MyCustomSupplementaryView // also takes .sectionFooter

Registering a view backed by a nib

Views backed by nibs must implement the NibLoadableView protocol. The protocol has a pre-defined extension, such that your view doesn't need to add any methods or properties.

class MyCoolCell: UITableViewCell, NibLoadableView {
  ...
}

Installation

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

pod "ReusableViews"

Author

Hesham Salman, [email protected]

Twitter: @WhatsASoftware

License

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

reusableviews's People

Contributors

iron-ham 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.