blob: a620463ca8e01950d3934eddb83303b44a51ac1d [file] [log] [blame] [view] [edit]
# Material Components for iOS Catalog
The Material Components for iOS Catalog collects examples from each component together into a single
app to explore, experiment, and experience.
## Generation
The catalog app is generated dynamically via CocoaPods wildcards inclusion in
[`MaterialComponentsExamples.podspec`](../MaterialComponentsExamples.podspec) The CocoaPods setup
includes:
- The source for each component
- Example sources matching `components/*/examples/*.{h,m,swift}`
At runtime, the app enumerates all linked instances of UIViewController that respond to the
`+catalogBreadcrumbs` class method, which returns an array of strings that define how to navigate
from the catalog's root view controller to that view controller. View controllers are grouped
together in the hierarchy defined by all the bread crumbs.
## Building and running the catalog
In the `catalog` directory,
pod update
open MDCCatalog.xcworkspace
Build and run the `MDCCatalog` target.
## Adding a new example
Let's build a hypothetical example for the "Ink" component.
Create a source file (either `.m` or `.swift`) in the component's `examples` directory, for example:
components/Ink/examples/InkDemoViewController.m
> View controller names must be globally unique across every component's example set. An easy way
> to ensure this is to prefix the controller with the name of the component.
Note that forsimple examplesyou likely won't need to create a .h file.
You can now create the view controller class.
```objective-c
#import <UIKit/UIKit.h>
@interface InkDemoViewController : UIViewController
@end
@implementation InkDemoViewController
+ (NSArray *)catalogBreadcrumbs {
return @[ @"Ink", @"README demo" ];
}
@end
```
To add the example to the Catalog app, simply run `pod install` in the `catalog` directory again:
```bash
cd catalog
pod install
```
Build and run to see your example listed in the app's hierarchy.
## Using storyboards
If you want your example to use a storyboard you need the view controller class to specify that
storyboard. You do this by implementing the `CatalogStoryboardViewController` protocol like so:
```objective-c
+ (NSString *)catalogStoryboardName {
return @"InkAutolayoutExample";
}
```
Place this source file in the component's `examples` directory, like so:
components/Ink/examples/InkAutolayoutExample.storyboard
> Storyboard names must be globally unique across every component's example set. An easy way
> to ensure this is to prefix the controller with the name of the component.
## Supplemental sources
Examples exist to demonstrate your component both interactively and in source code. Often examples
require supplemental setup code or sample data that isn't relevant to learning how to use your
component. You can store supplemental classes in the `supplemental` folder to keep them out of the
way. For example:
```bash
components/Ink/examples/supplemental/InkSampleData.h
components/Ink/examples/supplemental/InkSampleData.m
```
Use the `supplemental` folder to keep your example code clean and instructive.
- - -
## Useful Links
- [How To Use MDC-iOS](../docs/)
- [All Components](../components/)
- [Demo Apps](../demos/)
- [Contributing](../contributing/)
- [MDC-iOS on Stack Overflow](https://www.stackoverflow.com/questions/tagged/material-components+ios) (external site)
- [Material.io](https://material.io) (external site)
- [Material Design Guidelines](https://material.io/guidelines) (external site)