Giter Club home page Giter Club logo

voltron's Introduction

Voltron

UICollectionView with UIViewControllers instead of cells.

Illustration

View controller containment compliant!

Installation

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

pod "Voltron", '~> x.x.x'

Usage

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

  • #import <Voltron/Voltron.h>

  • Use WMLCollectionView instead of UICollectionView and WMLCollectionViewCell for cells, displaying view controllers.

  • Set the collectionView.containerViewController to the view controller that is hosting children view controllers.

  • Implement a data source method:

- (UIViewController *)collectionView:(WMLCollectionView *)collectionView controllerForIdentifier:(NSString *)identifier {
    if ([identifier isEqualToString:@"Login"]) {
        return [self.storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];
    } else if ([identifier isEqualToString:@"Profile"]) {
        return [self.storyboard instantiateViewControllerWithIdentifier:@"UserProfileViewController"];
    }
}
  • Once done displaying cell, call didEndDisplayingCell: passing the cell to give the collection view a clue that it can be recycled.
- (void)collectionView:(WMLCollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath {
    [collectionView didEndDisplayingCell:cell];
}

FAQ

Can WMLCollectionView host the regular cells along with view controller-based cells?

Yes.

How often is the collectionView:controllerForIdentifier: being called?

The data source method is called only when a new view controller is created, when possible, view controllers are being reused just like regular cells.

Is it a good place to configure my view controller with data?

It's definitely not. Only one time initialisation, and that is better be done in viewDidLoad of the loaded view controller.

To configure your view controller with data, use -[WMLCollectionViewCell contentViewController]

What about the view controller lifecycle?

The lifecycle of the view controller is preserved. When the view controller is about to be displayed, viewWillAppear: and viewDidAppear: are triggered.

Once the view controller goes away from the screen, viewWillDisappear: and viewDidDisappear: are triggered.

Performance?

You should keep in mind that in performance critical areas might suffer when you're trying to display too many cells simultaneously.

Be wise about the moment of filling the collection view with data. E.g. it's probably better to differ displaying 200 small cells while playing an opening transition.

For smooth scrolling try to differ the population of the controller with data.

In that sense, test project is intended just as a showcase of how to use the API, but it's obviously not a typical use case from performance point of view.

Why all the hassle with collectionView:didEndDisplayingCell:forItemAtIndexPath:?

This project is intended as App Store-complient, therefore I wanted to implement it using the public API only.

Why not to use collectionView:willDisplayCell:forItemAtIndexPath: then?

Project is intended to be iOS 7 compatible. Sadly, delegate method above is iOS 8+. Also, that's why you have to use a custom WMLCollectionViewCell. To notify collection view that it's about to be shown.

Why "Voltron"?

I really don't know, meanwhile, an unrelated picture. Illustration

License

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

Author

Sash Zats, [email protected]

๐Ÿฎ๐Ÿถ Moof!

voltron's People

Contributors

jstart avatar zats avatar

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.