material-components_materia.../components/Dialogs/examples/DialogsAlertExampleViewController.m
Galia Kaufman df2a4a8c1d
[Dialogs] Fix presented corner radius in custom view controllers (#6696)
DialogPresentationController changes the corner radius dynamically during presentation while ensuring that the presented view's corner radius always matches the corner radius of the tracking view which draws the shadow behind the presented view.
2019-03-02 10:03:55 -05:00

305 lines
16 KiB
Objective-C

// Copyright 2016-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 <UIKit/UIKit.h>
#import "MaterialButtons.h"
#import "MaterialCollections.h"
#import "MaterialColorScheme.h"
#import "MaterialDialogs+Theming.h"
#import "MaterialDialogs.h"
#import "MaterialTypography.h"
#import "MaterialTypographyScheme.h"
static NSString *const kReusableIdentifierItem = @"cell";
@interface DialogsAlertExampleViewController : MDCCollectionViewController
@property(nonatomic, strong, nullable) NSArray *modes;
@property(nonatomic, strong, nonnull) id<MDCContainerScheming> containerScheme;
@end
@interface DialogsAlertExampleViewController (Supplemental)
- (void)loadCollectionView:(nullable NSArray *)modes;
@end
@implementation DialogsAlertExampleViewController
- (instancetype)init {
self = [super init];
if (self) {
MDCContainerScheme *scheme = [[MDCContainerScheme alloc] init];
scheme.colorScheme =
[[MDCSemanticColorScheme alloc] initWithDefaults:MDCColorSchemeDefaultsMaterial201804];
_containerScheme = scheme;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self loadCollectionView:@[
@"Show Long Alert", @"Alert (Dynamic Type enabled)", @"Overpopulated Alert"
]];
}
- (void)collectionView:(UICollectionView *)collectionView
didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
[super collectionView:collectionView didSelectItemAtIndexPath:indexPath];
switch (indexPath.row) {
case 0:
[self didTapShowLongAlert];
break;
case 1:
[self didTapDynamicAlert];
break;
case 2:
[self didTapOverpopulatedAlert];
break;
}
}
- (void)themeAlertController:(MDCAlertController *)alertController {
[alertController applyThemeWithScheme:self.containerScheme];
}
- (IBAction)didTapShowLongAlert {
NSString *messageString =
@"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur "
"ultricies diam libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risus "
"maximus tempus. Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, "
"quis eleifend nisi eros dictum mi. In finibus vulputate eros, in luctus diam auctor in. "
"Aliquam fringilla neque at augue dictum iaculis. Etiam ac pellentesque lectus. Aenean "
"vestibulum, tortor nec cursus euismod, lectus tortor rhoncus massa, eu interdum lectus "
"ultricies diam libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risus "
"maximus tempus. Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, "
"quis eleifend nisi eros dictum mi. In finibus vulputate eros, in luctus diam auctor in. "
"Aliquam fringilla neque at augue dictum iaculis. Etiam ac pellentesque lectus. Aenean "
"vestibulum, tortor nec cursus euismod, lectus tortor rhoncus massa, eu interdum lectus "
"ultricies diam libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risus "
"maximus tempus. Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, "
"quis eleifend nisi eros dictum mi. In finibus vulputate eros, in luctus diam auctor in. "
"Aliquam fringilla neque at augue dictum iaculis. Etiam ac pellentesque lectus. Aenean "
"vestibulum, tortor nec cursus euismod, lectus tortor rhoncus massa, eu interdum lectus "
"ultricies diam libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risus "
"maximus tempus. Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, "
"quis eleifend nisi eros dictum mi. In finibus vulputate eros, in luctus diam auctor in. "
"Aliquam fringilla neque at augue dictum iaculis. Etiam ac pellentesque lectus. Aenean "
"vestibulum, tortor nec cursus euismod, lectus tortor rhoncus massa, eu interdum lectus "
"ultricies diam libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risus "
"maximus tempus. Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, "
"quis eleifend nisi eros dictum mi. In finibus vulputate eros, in luctus diam auctor in. "
"Aliquam fringilla neque at augue dictum iaculis. Etiam ac pellentesque lectus. Aenean "
"vestibulum, tortor nec cursus euismod, lectus tortor rhoncus massa, eu interdum lectus "
"ultricies diam libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risus "
"maximus tempus. Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, "
"quis eleifend nisi eros dictum mi. In finibus vulputate eros, in luctus diam auctor in. "
"Aliquam fringilla neque at augue dictum iaculis. Etiam ac pellentesque lectus. Aenean "
"vestibulum, tortor nec cursus euismod, lectus tortor rhoncus massa, eu interdum lectus "
"urna "
"ut nulla. Phasellus elementum lorem sit amet sapien dictum, vel cursus est semper. Aenean "
"vel turpis maximus, accumsan dui quis, cursus turpis. Nunc a tincidunt nunc, ut tempus "
"libero. Morbi ut orci laoreet, luctus neque nec, rhoncus enim. Cras dui erat, blandit ac "
"malesuada vitae, fringilla ac ante. Nullam dui diam, condimentum vitae mi et, dictum "
"euismod libero. Aliquam commodo urna vitae massa convallis aliquet.";
MDCAlertController *materialAlertController =
[MDCAlertController alertControllerWithTitle:nil message:messageString];
[self themeAlertController:materialAlertController];
MDCAlertAction *okAction = [MDCAlertAction actionWithTitle:@"OK"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"OK pressed");
}];
[materialAlertController addAction:okAction];
[self presentViewController:materialAlertController animated:YES completion:NULL];
}
- (IBAction)didTapDynamicAlert {
// The following strings are extra verbose to better demonstrate the dynamic handling of an alert.
NSString *titleString = @"This alert supports Dynamic Type font sizing.";
NSString *messageString =
@"You can adjust to size of the font used in the Settings App. Navigate to General -> "
"Accessibility -> Larger Text. Yout can drag the slider left and right to adjust the size "
"of your fonts to be larger or smaller. We will update the fonts used in this alert to "
"match your preference";
MDCAlertController *materialAlertController =
[MDCAlertController alertControllerWithTitle:titleString message:messageString];
[self themeAlertController:materialAlertController];
materialAlertController.mdc_adjustsFontForContentSizeCategory = YES;
MDCAlertAction *agreeAction = [MDCAlertAction actionWithTitle:@"AGREE"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"AGREE pressed");
}];
[materialAlertController addAction:agreeAction];
MDCAlertAction *okayAction = [MDCAlertAction actionWithTitle:@"OKAY"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"OKAY pressed");
}];
[materialAlertController addAction:okayAction];
MDCAlertAction *acceptAction = [MDCAlertAction actionWithTitle:@"ACCEPT"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"ACCEPT pressed");
}];
[materialAlertController addAction:acceptAction];
[self presentViewController:materialAlertController animated:YES completion:NULL];
}
- (IBAction)didTapOverpopulatedAlert {
NSString *titleString = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur";
NSString *messageString =
@"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur "
"ultricies diam libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risus "
"maximus tempus. Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, "
"quis eleifend nisi eros dictum mi. In finibus vulputate eros, in luctus diam auctor in. "
"Aliquam fringilla neque at augue dictum iaculis. Etiam ac pellentesque lectus. Aenean "
"vestibulum, tortor nec cursus euismod, lectus tortor rhoncus massa, eu interdum lectus "
"ultricies diam libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risus "
"maximus tempus. Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, "
"quis eleifend nisi eros dictum mi. In finibus vulputate eros, in luctus diam auctor in. "
"Aliquam fringilla neque at augue dictum iaculis. Etiam ac pellentesque lectus. Aenean "
"vestibulum, tortor nec cursus euismod, lectus tortor rhoncus massa, eu interdum lectus "
"ultricies diam libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risus "
"maximus tempus. Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, "
"quis eleifend nisi eros dictum mi. In finibus vulputate eros, in luctus diam auctor in. "
"Aliquam fringilla neque at augue dictum iaculis. Etiam ac pellentesque lectus. Aenean "
"vestibulum, tortor nec cursus euismod, lectus tortor rhoncus massa, eu interdum lectus "
"ultricies diam libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risus "
"maximus tempus. Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, "
"quis eleifend nisi eros dictum mi. In finibus vulputate eros, in luctus diam auctor in. "
"Aliquam fringilla neque at augue dictum iaculis. Etiam ac pellentesque lectus. Aenean "
"vestibulum, tortor nec cursus euismod, lectus tortor rhoncus massa, eu interdum lectus "
"ultricies diam libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risus "
"maximus tempus. Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, "
"quis eleifend nisi eros dictum mi. In finibus vulputate eros, in luctus diam auctor in. "
"Aliquam fringilla neque at augue dictum iaculis. Etiam ac pellentesque lectus. Aenean "
"vestibulum, tortor nec cursus euismod, lectus tortor rhoncus massa, eu interdum lectus "
"ultricies diam libero, eget porta arcu feugiat sit amet. Maecenas placerat felis sed risus "
"maximus tempus. Integer feugiat, augue in pellentesque dictum, justo erat ultricies leo, "
"quis eleifend nisi eros dictum mi. In finibus vulputate eros, in luctus diam auctor in. "
"Aliquam fringilla neque at augue dictum iaculis. Etiam ac pellentesque lectus. Aenean "
"vestibulum, tortor nec cursus euismod, lectus tortor rhoncus massa, eu interdum lectus "
"urna "
"ut nulla. Phasellus elementum lorem sit amet sapien dictum, vel cursus est semper. Aenean "
"vel turpis maximus, accumsan dui quis, cursus turpis. Nunc a tincidunt nunc, ut tempus "
"libero. Morbi ut orci laoreet, luctus neque nec, rhoncus enim. Cras dui erat, blandit ac "
"malesuada vitae, fringilla ac ante. Nullam dui diam, condimentum vitae mi et, dictum "
"euismod libero. Aliquam commodo urna vitae massa convallis aliquet.";
MDCAlertController *materialAlertController =
[MDCAlertController alertControllerWithTitle:titleString message:messageString];
[self themeAlertController:materialAlertController];
materialAlertController.mdc_adjustsFontForContentSizeCategory = YES;
MDCAlertAction *okAction = [MDCAlertAction actionWithTitle:@"OK"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"OK pressed");
}];
[materialAlertController addAction:okAction];
MDCAlertAction *action2 = [MDCAlertAction actionWithTitle:@"OK - 2"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"OK pressed");
}];
[materialAlertController addAction:action2];
MDCAlertAction *action3 = [MDCAlertAction actionWithTitle:@"OK - 3"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"OK pressed");
}];
[materialAlertController addAction:action3];
MDCAlertAction *action4 = [MDCAlertAction actionWithTitle:@"OK - 4"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"OK pressed");
}];
[materialAlertController addAction:action4];
MDCAlertAction *action5 = [MDCAlertAction actionWithTitle:@"OK - 5"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"OK pressed");
}];
[materialAlertController addAction:action5];
MDCAlertAction *action6 = [MDCAlertAction actionWithTitle:@"OK - 6"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"OK pressed");
}];
[materialAlertController addAction:action6];
MDCAlertAction *action7 = [MDCAlertAction actionWithTitle:@"OK - 7"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"OK pressed");
}];
[materialAlertController addAction:action7];
MDCAlertAction *action8 = [MDCAlertAction actionWithTitle:@"OK - 8"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"OK pressed");
}];
[materialAlertController addAction:action8];
MDCAlertAction *action9 = [MDCAlertAction actionWithTitle:@"OK - 9"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"OK pressed");
}];
[materialAlertController addAction:action9];
[self presentViewController:materialAlertController animated:YES completion:NULL];
}
@end
@implementation DialogsAlertExampleViewController (Supplemental)
- (void)loadCollectionView:(nullable NSArray *)modes {
[self.collectionView registerClass:[MDCCollectionViewTextCell class]
forCellWithReuseIdentifier:kReusableIdentifierItem];
self.modes = modes;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView
numberOfItemsInSection:(NSInteger)section {
return self.modes.count;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath {
MDCCollectionViewTextCell *cell =
[collectionView dequeueReusableCellWithReuseIdentifier:kReusableIdentifierItem
forIndexPath:indexPath];
cell.textLabel.text = self.modes[indexPath.row];
return cell;
}
@end
@implementation DialogsAlertExampleViewController (CatalogByConvention)
+ (NSDictionary *)catalogMetadata {
return @{
@"breadcrumbs" : @[ @"Dialogs", @"More Material Alert Examples" ],
@"primaryDemo" : @NO,
@"presentable" : @NO,
};
}
@end