blob: 90c9aca3d44baec7ffa40779b0a3131e2b8fa920 [file] [log] [blame] [edit]
// 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];
cell.textLabel.isAccessibilityElement = NO;
cell.isAccessibilityElement = YES;
cell.accessibilityLabel = cell.textLabel.text;
cell.accessibilityTraits = cell.accessibilityTraits | UIAccessibilityTraitButton;
return cell;
}
@end
@implementation DialogsAlertExampleViewController (CatalogByConvention)
+ (NSDictionary *)catalogMetadata {
return @{
@"breadcrumbs" : @[ @"Dialogs", @"More Material Alert Examples" ],
@"primaryDemo" : @NO,
@"presentable" : @NO,
};
}
@end