| // 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 "supplemental/TabBarTextOnlyExampleSupplemental.h" |
| #import "MaterialAppBar.h" |
| #import "MaterialCollections.h" |
| #import "MaterialHeaderStackView.h" |
| #import "MDCTabBarDisplayDelegate.h" |
| #import "MaterialTabs.h" |
| #import "MaterialTabs+Theming.h" |
| #import "MaterialContainerScheme.h" |
| |
| @implementation TabBarTextOnlyExample |
| |
| - (id)initWithCollectionViewLayout:(UICollectionViewLayout *)layout { |
| self = [super initWithCollectionViewLayout:layout]; |
| if (self) { |
| _containerScheme = [[MDCContainerScheme alloc] init]; |
| [self setupExampleViews:@[ |
| @"Change Alignment", @"Toggle Case", @"Clear Selection", @"Select First", @"Select Last" |
| ]]; |
| } |
| return self; |
| } |
| |
| - (void)viewDidLoad { |
| [super viewDidLoad]; |
| [self loadTabBar]; |
| self.appBarViewController.headerStackView.bottomBar = self.tabBar; |
| } |
| |
| #pragma mark - Action |
| |
| - (void)toggleCase:(id)sender { |
| self.tabBar.displaysUppercaseTitles = !self.tabBar.displaysUppercaseTitles; |
| } |
| |
| - (void)clearSelection:(id)sender { |
| self.tabBar.selectedItem = nil; |
| } |
| |
| #pragma mark - Private |
| |
| - (void)loadTabBar { |
| const CGRect bounds = self.view.bounds; |
| |
| // Long tab bar with lots of items of varying length. Also demonstrates configurable accent color. |
| self.tabBar = [[MDCTabBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(bounds) - 20, 0)]; |
| self.tabBar.items = @[ |
| [[UITabBarItem alloc] initWithTitle:@"This Is" image:nil tag:0], |
| [[UITabBarItem alloc] initWithTitle:@"A" image:nil tag:0], |
| [[UITabBarItem alloc] initWithTitle:@"Tab Bar" image:nil tag:0], |
| [[UITabBarItem alloc] initWithTitle:@"With" image:nil tag:0], |
| [[UITabBarItem alloc] initWithTitle:@"A Variety of Titles of Varying Length That Might Be Long" |
| image:nil |
| tag:0], |
| ]; |
| |
| [self.tabBar applyPrimaryThemeWithScheme:self.containerScheme]; |
| |
| self.tabBar.autoresizingMask = |
| UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin; |
| [self.tabBar sizeToFit]; |
| |
| self.tabBar.displayDelegate = self; |
| } |
| |
| - (void)changeAlignment:(id)sender { |
| UIAlertController *sheet = |
| [UIAlertController alertControllerWithTitle:nil |
| message:nil |
| preferredStyle:UIAlertControllerStyleActionSheet]; |
| sheet.popoverPresentationController.sourceView = (UICollectionViewCell *)sender; |
| sheet.popoverPresentationController.sourceRect = ((UICollectionViewCell *)sender).bounds; |
| [sheet addAction:[UIAlertAction actionWithTitle:@"Leading" |
| style:UIAlertActionStyleDefault |
| handler:^(UIAlertAction *_Nonnull action) { |
| [self setAlignment:MDCTabBarAlignmentLeading]; |
| }]]; |
| [sheet addAction:[UIAlertAction actionWithTitle:@"Center" |
| style:UIAlertActionStyleDefault |
| handler:^(UIAlertAction *_Nonnull action) { |
| [self setAlignment:MDCTabBarAlignmentCenter]; |
| }]]; |
| [sheet addAction:[UIAlertAction actionWithTitle:@"Justified" |
| style:UIAlertActionStyleDefault |
| handler:^(UIAlertAction *_Nonnull action) { |
| [self setAlignment:MDCTabBarAlignmentJustified]; |
| }]]; |
| [sheet addAction:[UIAlertAction actionWithTitle:@"Selected Center" |
| style:UIAlertActionStyleDefault |
| handler:^(UIAlertAction *_Nonnull action) { |
| [self setAlignment:MDCTabBarAlignmentCenterSelected]; |
| }]]; |
| [self presentViewController:sheet animated:YES completion:nil]; |
| } |
| |
| - (void)setAlignment:(MDCTabBarAlignment)alignment { |
| [self.tabBar setAlignment:alignment animated:YES]; |
| } |
| |
| #pragma mark - Options in Collection View |
| |
| - (void)collectionView:(UICollectionView *)collectionView |
| didSelectItemAtIndexPath:(NSIndexPath *)indexPath { |
| [super collectionView:collectionView didSelectItemAtIndexPath:indexPath]; |
| switch (indexPath.row) { |
| case 0: |
| [self changeAlignment:[collectionView cellForItemAtIndexPath:indexPath]]; |
| break; |
| |
| case 1: |
| [self toggleCase:collectionView]; |
| break; |
| |
| case 2: |
| [self clearSelection:collectionView]; |
| break; |
| |
| case 3: |
| [self.tabBar setSelectedItem:self.tabBar.items.firstObject animated:YES]; |
| break; |
| |
| case 4: |
| [self.tabBar setSelectedItem:self.tabBar.items.lastObject animated:YES]; |
| break; |
| |
| default: |
| // Unsupported |
| break; |
| } |
| } |
| |
| #pragma mark - MDCTabBarDisplayDelegate |
| |
| - (void)tabBar:(MDCTabBar *)tabBar willDisplayItem:(UITabBarItem *)item { |
| NSLog(@"Will display item: %@", item.title); |
| } |
| |
| - (void)tabBar:(MDCTabBar *)tabBar didEndDisplayingItem:(nonnull UITabBarItem *)item { |
| NSLog(@"Did end displaying item: %@", item.title); |
| } |
| |
| @end |