// Copyright 2017-present the Material Components for iOS authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #import "supplemental/CollectionsSectionInsetsExampleSupplemental.h" @implementation CollectionsSectionInsetsExample - (instancetype)initWithCoder:(NSCoder *)aDecoder { if (self = [super initWithCoder:aDecoder]) { [self collectionsSectionInsetsExampleCommonInit]; } return self; } - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { [self collectionsSectionInsetsExampleCommonInit]; } return self; } - (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout { if (self = [super initWithCollectionViewLayout:layout]) { [self collectionsSectionInsetsExampleCommonInit]; } return self; } - (void)collectionsSectionInsetsExampleCommonInit { _content = [NSMutableArray array]; _sectionUsesCustomInsets = [NSMutableDictionary dictionaryWithCapacity:kSectionCount]; } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { MDCCollectionViewTextCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kReusableIdentifierItem forIndexPath:indexPath]; cell.textLabel.text = self.content[indexPath.section][indexPath.item]; cell.accessibilityIdentifier = [NSString stringWithFormat:@"%ld.%ld", (long)indexPath.section, (long)indexPath.row]; if (indexPath.row == 0) { UISwitch *switchControl = [[UISwitch alloc] initWithFrame:CGRectZero]; [switchControl setOn:[self.sectionUsesCustomInsets[@(indexPath.section)] boolValue]]; [switchControl addTarget:self action:@selector(didSet:) forControlEvents:UIControlEventValueChanged]; switchControl.tag = indexPath.section; cell.accessoryView = switchControl; } return cell; } #pragma mark - - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { UIEdgeInsets insets = [super collectionView:collectionView layout:collectionViewLayout insetForSectionAtIndex:section]; if ([self.sectionUsesCustomInsets[@(section)] boolValue]) { insets.left = MIN(40, 8 * section); insets.right = insets.left; } return insets; } #pragma mark - UIControlEventHandlers - (void)didSet:(UISwitch *)sender { NSUInteger section = sender.tag; self.sectionUsesCustomInsets[@(section)] = @(sender.isOn); [self.collectionView.collectionViewLayout invalidateLayout]; } @end