| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /*
- * Copyright 2016 Google Inc. 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 "GoogleMapsDemos/MasterViewController.h"
- #import <GoogleMaps/GoogleMaps.h>
- #import "GoogleMapsDemos/DemoAppDelegate.h"
- #import "GoogleMapsDemos/Samples/Samples.h"
- @implementation MasterViewController {
- NSArray *_demos;
- NSArray *_demoSections;
- BOOL _isPhone;
- UIPopoverController *_popover;
- UIBarButtonItem *_samplesButton;
- __weak UIViewController *_controller;
- CLLocationManager *_locationManager;
- }
- - (void)viewDidLoad {
- [super viewDidLoad];
- _isPhone = [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone;
- if (!_isPhone) {
- self.clearsSelectionOnViewWillAppear = NO;
- } else {
- UIBarButtonItem *backButton =
- [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Back", @"Back")
- style:UIBarButtonItemStylePlain
- target:nil
- action:nil];
- [self.navigationItem setBackBarButtonItem:backButton];
- }
- self.title = NSLocalizedString(@"Maps SDK Demos", @"Maps SDK Demos");
- self.title = [NSString stringWithFormat:@"%@: %@", self.title, [GMSServices SDKVersion]];
- self.tableView.autoresizingMask =
- UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
- self.tableView.delegate = self;
- self.tableView.dataSource = self;
- _demoSections = [Samples loadSections];
- _demos = [Samples loadDemos];
- if (!_isPhone) {
- [self loadDemo:0 atIndex:0];
- }
- }
- #pragma mark - UITableViewController
- - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
- return _demoSections.count;
- }
- - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
- return 35.0;
- }
- - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
- return [_demoSections objectAtIndex:section];
- }
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
- NSArray *demosInSection = [_demos objectAtIndex:section];
- return demosInSection.count;
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView
- cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- static NSString *cellIdentifier = @"Cell";
- UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
- if (cell == nil) {
- cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
- reuseIdentifier:cellIdentifier];
- if (_isPhone) {
- [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
- }
- }
- NSDictionary *demo = [[_demos objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
- cell.textLabel.text = [demo objectForKey:@"title"];
- cell.detailTextLabel.text = [demo objectForKey:@"description"];
- return cell;
- }
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
- // The user has chosen a sample; load it and clear the selection!
- [self loadDemo:indexPath.section atIndex:indexPath.row];
- [tableView deselectRowAtIndexPath:indexPath animated:YES];
- }
- #pragma mark - Split view
- - (void)splitViewController:(UISplitViewController *)splitController
- willHideViewController:(UIViewController *)viewController
- withBarButtonItem:(UIBarButtonItem *)barButtonItem
- forPopoverController:(UIPopoverController *)popoverController {
- _popover = popoverController;
- _samplesButton = barButtonItem;
- _samplesButton.title = NSLocalizedString(@"Samples", @"Samples");
- _samplesButton.style = UIBarButtonItemStyleDone;
- [self updateSamplesButton];
- }
- - (void)splitViewController:(UISplitViewController *)splitController
- willShowViewController:(UIViewController *)viewController
- invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
- _popover = nil;
- _samplesButton = nil;
- [self updateSamplesButton];
- }
- #pragma mark - Private methods
- - (void)loadDemo:(NSUInteger)section atIndex:(NSUInteger)index {
- NSDictionary *demo = [[_demos objectAtIndex:section] objectAtIndex:index];
- UIViewController *controller = [[[demo objectForKey:@"controller"] alloc] init];
- _controller = controller;
- if (controller != nil) {
- controller.title = [demo objectForKey:@"title"];
- if (_isPhone) {
- [self.navigationController pushViewController:controller animated:YES];
- } else {
- [self.appDelegate setSample:controller];
- [_popover dismissPopoverAnimated:YES];
- }
- [self updateSamplesButton];
- }
- }
- // This method is invoked when the left 'back' button in the split view
- // controller on iPad should be updated (either made visible or hidden).
- // It assumes that the left bar button item may be safely modified to contain
- // the samples button.
- - (void)updateSamplesButton {
- _controller.navigationItem.leftBarButtonItem = _samplesButton;
- }
- @end
|