mirror of
https://github.com/material-components/material-components-ios.git
synced 2026-02-20 08:27:32 +08:00
159 lines
5.9 KiB
Objective-C
159 lines
5.9 KiB
Objective-C
// Copyright 2018-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 "MaterialChips+Theming.h"
|
|
#import "MaterialChips.h"
|
|
|
|
#import "supplemental/ChipsExampleAssets.h"
|
|
#import "MaterialContainerScheme.h"
|
|
#import "MaterialTypographyScheme.h"
|
|
|
|
@interface ChipsCustomizedExampleViewController
|
|
: UIViewController <UICollectionViewDelegate, UICollectionViewDataSource>
|
|
@property(nonatomic, strong) NSArray<NSString *> *titles;
|
|
@property(nonatomic, strong) UICollectionView *collectionView;
|
|
@property(nonatomic, strong) MDCContainerScheme *containerScheme;
|
|
@end
|
|
|
|
@implementation ChipsCustomizedExampleViewController
|
|
|
|
- (id)init {
|
|
self = [super init];
|
|
if (self) {
|
|
_containerScheme = [[MDCContainerScheme alloc] init];
|
|
_titles = @[
|
|
@"Doorman",
|
|
@"Elevator",
|
|
@"Garage Parking",
|
|
@"Gym",
|
|
@"Laundry in Building",
|
|
@"Green Building",
|
|
@"Parking Available",
|
|
@"Pets Allowed",
|
|
@"Pied-a-Terre Allowed",
|
|
@"Swimming Pool",
|
|
@"Smoke-free",
|
|
];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
+ (void)configureChip:(MDCChipView *)chip {
|
|
UIFont *customTitleFont = [UIFont fontWithName:@"ChalkDuster" size:14];
|
|
chip.titleFont = customTitleFont;
|
|
|
|
UIColor *customColor = [UIColor blueColor];
|
|
[chip setTitleColor:customColor forState:UIControlStateNormal];
|
|
[chip setBorderColor:customColor forState:UIControlStateNormal];
|
|
[chip setBorderWidth:2 forState:UIControlStateNormal];
|
|
[chip setInkColor:[customColor colorWithAlphaComponent:(CGFloat)0.2]
|
|
forState:UIControlStateNormal];
|
|
|
|
UIColor *customSelectedColor = [UIColor orangeColor];
|
|
[chip setTitleColor:customSelectedColor forState:UIControlStateSelected];
|
|
[chip setBorderColor:customSelectedColor forState:UIControlStateSelected];
|
|
[chip setBorderWidth:4 forState:UIControlStateSelected];
|
|
[chip setInkColor:[customSelectedColor colorWithAlphaComponent:(CGFloat)0.2]
|
|
forState:UIControlStateSelected];
|
|
[chip setInkColor:[customSelectedColor colorWithAlphaComponent:(CGFloat)0.2]
|
|
forState:UIControlStateSelected | UIControlStateHighlighted];
|
|
}
|
|
|
|
- (void)loadView {
|
|
[super loadView];
|
|
|
|
MDCTypographyScheme *typographyScheme =
|
|
[[MDCTypographyScheme alloc] initWithDefaults:MDCTypographySchemeDefaultsMaterial201902];
|
|
typographyScheme.useCurrentContentSizeCategoryWhenApplied = YES;
|
|
self.containerScheme.typographyScheme = typographyScheme;
|
|
|
|
MDCChipCollectionViewFlowLayout *layout = [[MDCChipCollectionViewFlowLayout alloc] init];
|
|
layout.minimumInteritemSpacing = 10;
|
|
MDCChipCollectionViewCell *cell = [[MDCChipCollectionViewCell alloc] init];
|
|
layout.estimatedItemSize = [cell intrinsicContentSize];
|
|
|
|
self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds
|
|
collectionViewLayout:layout];
|
|
self.collectionView.autoresizingMask =
|
|
UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
|
self.collectionView.dataSource = self;
|
|
self.collectionView.delegate = self;
|
|
self.collectionView.allowsMultipleSelection = YES;
|
|
self.collectionView.backgroundColor = [UIColor whiteColor];
|
|
self.collectionView.delaysContentTouches = NO;
|
|
self.collectionView.contentInset = UIEdgeInsetsMake(4, 8, 4, 8);
|
|
[self.collectionView registerClass:[MDCChipCollectionViewCell class]
|
|
forCellWithReuseIdentifier:@"MDCChipCollectionViewCell"];
|
|
|
|
[self.view addSubview:self.collectionView];
|
|
}
|
|
|
|
- (void)viewDidLoad {
|
|
[super viewDidLoad];
|
|
|
|
// When Dynamic Type changes we need to invalidate the collection view layout in order to let the
|
|
// cells change their dimensions because our chips use manual layout.
|
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
selector:@selector(contentSizeCategoryDidChange:)
|
|
name:UIContentSizeCategoryDidChangeNotification
|
|
object:nil];
|
|
}
|
|
|
|
- (void)contentSizeCategoryDidChange:(NSNotification *)notification {
|
|
[self.collectionView.collectionViewLayout invalidateLayout];
|
|
}
|
|
|
|
- (NSInteger)collectionView:(UICollectionView *)collectionView
|
|
numberOfItemsInSection:(NSInteger)section {
|
|
return self.titles.count;
|
|
}
|
|
|
|
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
|
|
cellForItemAtIndexPath:(NSIndexPath *)indexPath {
|
|
MDCChipCollectionViewCell *cell =
|
|
[collectionView dequeueReusableCellWithReuseIdentifier:@"MDCChipCollectionViewCell"
|
|
forIndexPath:indexPath];
|
|
|
|
[[self class] configureChip:cell.chipView];
|
|
cell.chipView.titleLabel.text = self.titles[indexPath.row];
|
|
cell.chipView.selectedImageView.image = ChipsExampleAssets.doneImage;
|
|
cell.alwaysAnimateResize = YES;
|
|
[cell.chipView applyThemeWithScheme:self.containerScheme];
|
|
return cell;
|
|
}
|
|
|
|
- (void)collectionView:(UICollectionView *)collectionView
|
|
didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
|
|
[collectionView performBatchUpdates:nil completion:nil];
|
|
}
|
|
|
|
- (void)collectionView:(UICollectionView *)collectionView
|
|
didDeselectItemAtIndexPath:(NSIndexPath *)indexPath {
|
|
[collectionView performBatchUpdates:nil completion:nil];
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation ChipsCustomizedExampleViewController (CatalogByConvention)
|
|
|
|
+ (NSDictionary *)catalogMetadata {
|
|
return @{
|
|
@"breadcrumbs" : @[ @"Chips", @"Customized" ],
|
|
@"primaryDemo" : @NO,
|
|
@"presentable" : @NO,
|
|
};
|
|
}
|
|
|
|
@end
|