project_files/HedgewarsMobile/Classes/SplitViewRootController.m
changeset 3701 8c449776ebe6
parent 3697 d5b30d6373fc
child 3783 8e9daf967406
equal deleted inserted replaced
3699:e5e2cbc90891 3701:8c449776ebe6
    10 #import "MasterViewController.h"
    10 #import "MasterViewController.h"
    11 #import "DetailViewController.h"
    11 #import "DetailViewController.h"
    12 #import "CommodityFunctions.h"
    12 #import "CommodityFunctions.h"
    13 
    13 
    14 @implementation SplitViewRootController
    14 @implementation SplitViewRootController
    15 
    15 @synthesize activeController;
    16 
    16 
    17 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    17 -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    18     return rotationManager(interfaceOrientation);
    18     return rotationManager(interfaceOrientation);
    19 }
    19 }
    20 
    20 
    21 -(void) didReceiveMemoryWarning {
    21 -(void) didReceiveMemoryWarning {
    22     // Releases the view if it doesn't have a superview.
    22     // Releases the view if it doesn't have a superview.
    23     [super didReceiveMemoryWarning];
    23     [super didReceiveMemoryWarning];
    24     // Release any cached data, images, etc that aren't in use.
    24     // Release any cached data, images, etc that aren't in use.
    25     if (detailViewController.view.superview == nil)
    25     if (self.activeController.view.superview == nil)
    26         detailViewController = nil;
    26         self.activeController = nil;
    27     MSG_MEMCLEAN();
    27     MSG_MEMCLEAN();
    28 }
    28 }
    29 
    29 
    30 // load the view programmatically; we need a splitViewController that handles a MasterViewController
    30 // load the view programmatically; we need a splitViewController that handles a MasterViewController
    31 // (which is just a UITableViewController) and a DetailViewController where we present options
    31 // (which is just a UITableViewController) and a DetailViewController where we present options
    32 -(void) viewDidLoad {
    32 -(void) viewDidLoad {
    33     detailViewController = [[DetailViewController alloc] initWithStyle:UITableViewStyleGrouped];
    33     CGRect rect = [[UIScreen mainScreen] bounds];
    34     UINavigationController *detailedNavController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
    34     self.view.frame = CGRectMake(0, 0, rect.size.height, rect.size.width);
    35     [detailViewController release];
       
    36 
    35 
    37     CGRect rect = [[UIScreen mainScreen] bounds];
    36     if (self.activeController == nil) {
       
    37         MasterViewController *rightController = [[MasterViewController alloc] initWithStyle:UITableViewStyleGrouped];
       
    38         rightController.targetController = nil;
       
    39         self.activeController = rightController;
       
    40         [rightController release];
       
    41     }
       
    42     UINavigationController *rightNavController = [[UINavigationController alloc] initWithRootViewController:self.activeController];
       
    43 
    38     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    44     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    39         self.view.frame = CGRectMake(0, 0, rect.size.height, rect.size.width);
    45         MasterViewController *leftController = [[MasterViewController alloc] initWithStyle:UITableViewStylePlain];
       
    46         leftController.targetController = self.activeController;
       
    47         UINavigationController *leftNavController = [[UINavigationController alloc] initWithRootViewController:leftController];
       
    48         [leftController release];
    40 
    49 
    41         UISplitViewController *splitViewRootController = [[UISplitViewController alloc] init];
    50         UISplitViewController *splitViewRootController = [[UISplitViewController alloc] init];
       
    51         splitViewRootController.delegate = nil;
    42         splitViewRootController.view.frame = CGRectMake(0, 0, rect.size.height, rect.size.width);
    52         splitViewRootController.view.frame = CGRectMake(0, 0, rect.size.height, rect.size.width);
    43 
    53         splitViewRootController.viewControllers = [NSArray arrayWithObjects: leftNavController, rightNavController, nil];
    44         MasterViewController *masterViewController = [[MasterViewController alloc] initWithStyle:UITableViewStylePlain];
    54         [leftNavController release];
    45         UINavigationController *mainNavController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
    55         [rightNavController release];
    46         [masterViewController release];
       
    47 
       
    48         splitViewRootController.delegate = detailViewController;
       
    49         masterViewController.detailViewController = detailViewController;
       
    50         splitViewRootController.viewControllers = [NSArray arrayWithObjects: mainNavController, detailedNavController, nil];
       
    51         [mainNavController release];
       
    52         [detailedNavController release];
       
    53 
    56 
    54         // add view to main controller
    57         // add view to main controller
    55         [self.view addSubview:splitViewRootController.view];
    58         [self.view addSubview:splitViewRootController.view];
    56     } else {
    59     } else {
    57         [self.view addSubview:detailedNavController.view];
    60         rightNavController.view.frame = CGRectMake(0, 0, rect.size.height, rect.size.width);
       
    61         [self.view addSubview:rightNavController.view];
    58     }
    62     }
    59 
    63 
    60     [super viewDidLoad];
    64     [super viewDidLoad];
    61 }
    65 }
    62 
    66 
    63 -(void) viewDidUnload {
    67 -(void) viewDidUnload {
    64     detailViewController = nil;
    68     self.activeController = nil;
    65     MSG_DIDUNLOAD();
    69     MSG_DIDUNLOAD();
    66     [super viewDidUnload];
    70     [super viewDidUnload];
    67 }
    71 }
    68 
    72 
    69 -(void) dealloc {
    73 -(void) dealloc {
    70     [detailViewController release];
    74     [self.activeController release];
    71     [super dealloc];
    75     [super dealloc];
    72 }
    76 }
    73 
    77 
    74 #pragma mark -
    78 #pragma mark -
    75 #pragma mark additional methods as we're using a UINavigationController programmatically
    79 #pragma mark additional methods as we're using a UINavigationController programmatically
    76 // see http://davidebenini.it/2009/01/03/viewwillappear-not-being-called-inside-a-uinavigationcontroller/
    80 // see http://davidebenini.it/2009/01/03/viewwillappear-not-being-called-inside-a-uinavigationcontroller/
    77 -(void) viewWillAppear:(BOOL)animated {
    81 -(void) viewWillAppear:(BOOL)animated {
    78     [super viewWillAppear:animated];
    82     [super viewWillAppear:animated];
    79     [detailViewController.navigationController viewWillAppear:animated];
    83     [self.activeController.navigationController viewWillAppear:animated];
    80 }
    84 }
    81 
    85 
    82 -(void) viewWillDisappear:(BOOL)animated {
    86 -(void) viewWillDisappear:(BOOL)animated {
    83     [super viewWillDisappear:animated];
    87     [super viewWillDisappear:animated];
    84     [detailViewController.navigationController viewWillDisappear:animated];
    88     [self.activeController.navigationController viewWillDisappear:animated];
    85 }
    89 }
    86 
    90 
    87 -(void) viewDidAppear:(BOOL)animated {
    91 -(void) viewDidAppear:(BOOL)animated {
    88     [super viewDidLoad];
    92     [super viewDidLoad];
    89     [detailViewController.navigationController viewDidAppear:animated];
    93     [self.activeController.navigationController viewDidAppear:animated];
    90 }
    94 }
    91 
    95 
    92 -(void) viewDidDisappear:(BOOL)animated {
    96 -(void) viewDidDisappear:(BOOL)animated {
    93     [super viewDidUnload];
    97     [super viewDidUnload];
    94     [detailViewController.navigationController viewDidDisappear:animated];
    98     [self.activeController.navigationController viewDidDisappear:animated];
    95 }
    99 }
    96 
   100 
    97 
   101 
    98 @end
   102 @end