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 |