• Stars
    star
    243
  • Rank 166,489 (Top 4 %)
  • Language
    Objective-C
  • License
    MIT License
  • Created about 10 years ago
  • Updated over 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

When UICollectionViewCell needs to be a UIViewController. WARNING: this repo is not actively maintained

Warning

This was intended as a proof of concept, I don't really have any plans to support this project, so, please, mind the gap.

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 to 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 defer displaying 200 small cells while playing an opening transition.

For smooth scrolling try to defer 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-compliant, 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!

More Repositories

1

AdjustFontSize-Xcode-Plugin

Instant font size adjustment with control – / control +
Objective-C
271
star
2

BrowserTV

Turn your TV into a dashboard displaying any webpage!
Swift
226
star
3

SpeechRecognition

Generating subtitles for a video in realtime using SFSpeechRecognizer
Objective-C
211
star
4

PreciseCoverage

Make Xcode code coverage more informative
Objective-C
167
star
5

github_bus_factor

Calculate bus factor and other useful parameters for GitHub projects. Alternative to GitHub stars
Ruby
104
star
6

TouchBarLauncher

Touch Bar simulator launcher. Requires Xcode 8.1 and macOS 10.12.1
Swift
68
star
7

Tribute

Programmatic creation of NSAttributedString doesn't have to be a pain
Swift
63
star
8

LiteratureClock

Clock using time quotes from the literature, based on the work of JohannesNE
Objective-C++
62
star
9

Crash-Manager

iOS client for Crashlytics
Objective-C
25
star
10

Presentations

Various talks and corresponding sample code
Objective-C
20
star
11

Descriptive-GitHub

Safari extension adding repos descriptions to your feed
JavaScript
20
star
12

watchtower

QLPreviewController with remote URLs support
Objective-C
19
star
13

BetaWarpaint

Xcode plugin making it easier to notice when you're dealing with beta release
Objective-C
14
star
14

GitHubPR.safariextension

Safari extension for GitHub PRs; hides reviewed files, shows files changed since last review
JavaScript
13
star
15

Injector

Naive dependancy injection for Swift
Swift
9
star
16

CAEmitterLayer-scrubbing

Scrubbing through CAEmitterLayer for better control over timing of emission
Swift
7
star
17

p5swift

Like p5js, but in Swift
Swift
7
star
18

manhattan-extruded

stl model of buildings of Manhattan extruded by their heights
6
star
19

Copy

Copy a-la iOS in OS X Share menu
Swift
5
star
20

Geometry

Set of geometrical abstractions and convenience methods
Swift
4
star
21

google-diff-match-patch

Automatically exported from code.google.com/p/google-diff-match-patch
Python
2
star
22

NestedKVO

Observing KVO through collections
Objective-C
2
star
23

Al-Dente

UIImage (de)serialization with no compression
Objective-C
2
star
24

re1

Swift implementation of regular expression engine re1 with generic support
Swift
2
star
25

Geppetto

Sample shortcut can be found here: https://www.icloud.com/shortcuts/91958ce97671415487d15f6751d9a149
Swift
2
star
26

AsynDisplayKit-ASImageNode-bug

Potential bug in ASImageNode
Swift
1
star
27

zats.github.io

CSS
1
star
28

Bicycle

Bicycles! Scrapers! 🐮🐶 Moof!
Python
1
star
29

Audrey

Swift
1
star
30

ColorPicker-macOS

Wrapper app around NSColorPanel - all built in / 3rd party color pickers at your fingertips
Swift
1
star
31

plist-bug

Bug saving to plist using Xcodeproj. Seems to be related to usage of symbols vs strings
Swift
1
star
32

hgit

Make 2-phase nature of git opt-in
Rust
1
star