blob: 2aafed85c2522f217cd029c620dc23133c794abe [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 "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