You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
4.8 KiB
149 lines
4.8 KiB
![]()
2 years ago
|
#if !defined(__has_feature) || !__has_feature(objc_arc)
|
||
|
#error "This file requires ARC support."
|
||
|
#endif
|
||
|
|
||
|
#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
|