IGListKit/Tests/Objects/IGTestStackedDataSource.m
Bofei Zhu f7702fa713 Container Inset Size For Section Controller
Summary:
Add API for #315. Not sure if this is what you want rnystrom though 🤔. Will add tests after you confirm.

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [ ] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/456

Reviewed By: jessesquires

Differential Revision: D4697190

Pulled By: rnystrom

fbshipit-source-id: f8513cf2fa33441eb40f486954136553d19dda0c
2017-03-15 09:25:40 -07:00

70 lines
3.2 KiB
Objective-C

/**
* Copyright (c) 2016-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import "IGTestStackedDataSource.h"
#import <IGListKit/IGListStackedSectionController.h>
#import "IGTestCell.h"
#import "IGListTestSection.h"
#import "IGListTestContainerSizeSection.h"
@implementation IGTestStackedDataSource
- (NSArray *)objectsForListAdapter:(IGListAdapter *)listAdapter {
return self.objects;
}
- (IGListSectionController <IGListSectionType> *)listAdapter:(IGListAdapter *)listAdapter sectionControllerForObject:(id)object {
NSMutableArray *controllers = [[NSMutableArray alloc] init];
for (id value in [(IGTestObject *)object value]) {
id controller;
// use a standard IGListTestSection
if ([value isKindOfClass:[NSNumber class]]) {
if ([(NSNumber*)value isEqual: @42]) {
IGListTestContainerSizeSection *section = [[IGListTestContainerSizeSection alloc] init];
section.items = [value integerValue];
controller = section;
} else {
IGListTestSection *section = [[IGListTestSection alloc] init];
section.items = [value integerValue];
controller = section;
}
} else if ([value isKindOfClass:[NSString class]]) {
void (^configureBlock)(id, __kindof UICollectionViewCell *) = ^(id obj, IGTestCell *cell) {
// capturing the value in block scope so we use the CHILD OBJECT of the stack
// otherwise the block uses the IGTestObject in the block param
cell.label.text = value;
};
CGSize (^sizeBlock)(id, id<IGListCollectionContext>) = ^CGSize(IGTestObject *item, id<IGListCollectionContext> collectionContext) {
return CGSizeMake([collectionContext containerSize].width, 44);
};
// use either nibs or storyboards with NSString depending on the string value
if ([value isEqualToString:@"nib"]) {
controller = [[IGListSingleSectionController alloc] initWithNibName:@"IGTestNibCell"
bundle:[NSBundle bundleForClass:self.class]
configureBlock:configureBlock
sizeBlock:sizeBlock];
} else {
controller = [[IGListSingleSectionController alloc] initWithStoryboardCellIdentifier:@"IGTestStoryboardCell"
configureBlock:configureBlock
sizeBlock:sizeBlock];
}
}
[controllers addObject:controller];
}
return [[IGListStackedSectionController alloc] initWithSectionControllers:controllers];
}
- (nullable UIView *)emptyViewForListAdapter:(IGListAdapter *)listAdapter {
return nil;
}
@end