Yarden Eitan 7f7bc36202
[Catalog] Expose colorScheme + typographyScheme properties for all examples to use app wide theming (#3478)
Made colorScheme and typographyScheme properties in the class interfaces for all our examples.
Moved theming away from example inits and into viewDidLoad
Small update for slider example to allow it to grab the theming properly.
Related Pivotal: https://www.pivotaltracker.com/story/show/156616695
2018-04-25 15:15:17 -04:00

363 lines
20 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 "supplemental/DialogsAlertViewControllerSupplemental.h"
#import "MaterialButtons.h"
#import "MaterialDialogs.h"
#import "MaterialDialogs+ColorThemer.h"
#import "MaterialDialogs+TypographyThemer.h"
@implementation DialogsAlertViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self loadCollectionView:
@[ @"Show Alert",
@"Show Long Alert",
@"Non-Dismissable Alert",
@"Dynamic Alert",
@"Overpopulated Alert",
@"Style Alert",
@"Un-style Alert"]];
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
[super collectionView:collectionView didSelectItemAtIndexPath:indexPath];
switch (indexPath.row) {
case 0:
[self didTapShowAlert];
break;
case 1:
[self didTapShowLongAlert];
break;
case 2:
[self didTapNondismissingAlert];
break;
case 3:
[self didTapDynamicAlert];
break;
case 4:
[self didTapOverpopulatedAlert];
break;
case 5:
[self didTapStyleAlert];
break;
case 6:
[self didTapUnstyleAlert];
break;
}
}
- (void)themeAlertController:(MDCAlertController *)alertController {
[MDCAlertColorThemer applySemanticColorScheme:self.colorScheme toAlertController:alertController];
[MDCAlertTypographyThemer applyTypographyScheme:self.typographyScheme
toAlertController:alertController];
}
- (IBAction)didTapShowAlert {
NSString *titleString = @"Using Material alert controller?";
NSString *messageString = @"Be careful with modal alerts as they can be annoying if over-used.";
MDCAlertController *materialAlertController =
[MDCAlertController alertControllerWithTitle:titleString message:messageString];
[self themeAlertController:materialAlertController];
MDCAlertAction *agreeAaction = [MDCAlertAction actionWithTitle:@"AGREE"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"AGREE pressed");
}];
[materialAlertController addAction:agreeAaction];
MDCAlertAction *disagreeAaction = [MDCAlertAction actionWithTitle:@"DISAGREE"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"DISAGREE pressed");
}];
[materialAlertController addAction:disagreeAaction];
[self presentViewController:materialAlertController animated:YES completion:NULL];
}
- (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)didTapNondismissingAlert {
NSString *titleString = @"This alert requires an action.";
NSString *messageString = @"You can't dismiss it by tapping the background. You must choose "
"one of the actions available.";
MDCAlertController *materialAlertController =
[MDCAlertController alertControllerWithTitle:titleString message:messageString];
[self themeAlertController:materialAlertController];
MDCAlertAction *agreeAction = [MDCAlertAction actionWithTitle:@"AGREE"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"AGREE pressed");
}];
[materialAlertController addAction:agreeAction];
MDCAlertAction *disagreeAaction = [MDCAlertAction actionWithTitle:@"DISAGREE"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"DISAGREE pressed");
}];
[materialAlertController addAction:disagreeAaction];
// This code accesses the presentation controller and turns off dismiss on background tap.
MDCDialogPresentationController *presentationController =
materialAlertController.mdc_dialogPresentationController;
presentationController.dismissOnBackgroundTap = NO;
[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 *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];
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];
[self presentViewController:materialAlertController animated:YES completion:NULL];
}
- (IBAction)didTapStyleAlert {
[MDCAlertControllerView appearance].titleFont = [UIFont fontWithName:@"American Typewriter" size:16];
[MDCAlertControllerView appearance].titleColor = [UIColor greenColor];
[MDCAlertControllerView appearance].messageFont = [UIFont fontWithName:@"Chalkduster" size:14];
[MDCAlertControllerView appearance].messageColor = [UIColor blueColor];
[MDCAlertControllerView appearance].buttonFont = [UIFont fontWithName:@"Chalkduster" size:16];
[MDCAlertControllerView appearance].buttonColor = [UIColor purpleColor];
[MDCAlertControllerView appearance].mdc_adjustsFontForContentSizeCategory = YES;
NSString *titleString = @"Style an alert controller?";
NSString *messageString = @"Be careful with modal alerts as they can be annoying if over-used.";
MDCAlertController *materialAlertController =
[MDCAlertController alertControllerWithTitle:titleString message:messageString];
[self themeAlertController:materialAlertController];
MDCAlertAction *agreeAaction = [MDCAlertAction actionWithTitle:@"AGREE"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"AGREE pressed");
}];
[materialAlertController addAction:agreeAaction];
MDCAlertAction *disagreeAaction = [MDCAlertAction actionWithTitle:@"DISAGREE"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"DISAGREE pressed");
}];
[materialAlertController addAction:disagreeAaction];
[self presentViewController:materialAlertController animated:YES completion:NULL];
}
- (IBAction)didTapUnstyleAlert {
[MDCAlertControllerView appearance].titleFont = nil;
[MDCAlertControllerView appearance].titleColor = nil;
[MDCAlertControllerView appearance].messageFont = nil;
[MDCAlertControllerView appearance].messageColor = nil;
[MDCAlertControllerView appearance].buttonFont = nil;
// We must explicitly set the color to black since setting it to nil doesn't reset the color to
// black, but sets it to white
[MDCAlertControllerView appearance].buttonColor = [UIColor blackColor];
[MDCAlertControllerView appearance].mdc_adjustsFontForContentSizeCategory = NO;
NSString *titleString = @"Using Material alert controller?";
NSString *messageString = @"Be careful with modal alerts as they can be annoying if over-used.";
MDCAlertController *materialAlertController =
[MDCAlertController alertControllerWithTitle:titleString message:messageString];
[self themeAlertController:materialAlertController];
MDCAlertAction *agreeAaction = [MDCAlertAction actionWithTitle:@"AGREE"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"AGREE pressed");
}];
[materialAlertController addAction:agreeAaction];
MDCAlertAction *disagreeAaction = [MDCAlertAction actionWithTitle:@"DISAGREE"
handler:^(MDCAlertAction *action) {
NSLog(@"%@", @"DISAGREE pressed");
}];
[materialAlertController addAction:disagreeAaction];
[self presentViewController:materialAlertController animated:YES completion:NULL];
}
@end