From 6423283b00fd155c2f89bd4ac0bc624d1e52323c Mon Sep 17 00:00:00 2001 From: Maik Gosenshuis Date: Thu, 20 Jan 2011 14:05:18 +0100 Subject: [PATCH 1/5] The default action for the UIBarButtonItem supplied by the MGSplitViewDelegate now closes the UIPopoverController if it is visible. This matches the behaviour of UISplitViewController. --- Classes/MGSplitViewController.m | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Classes/MGSplitViewController.m b/Classes/MGSplitViewController.m index 61b30a6..2177ef2 100644 --- a/Classes/MGSplitViewController.m +++ b/Classes/MGSplitViewController.m @@ -704,16 +704,21 @@ - (IBAction)toggleMasterView:(id)sender - (IBAction)showMasterPopover:(id)sender { - if (_hiddenPopoverController && !(_hiddenPopoverController.popoverVisible)) { - // Inform delegate. - if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:popoverController:willPresentViewController:)]) { - [(NSObject *)_delegate splitViewController:self - popoverController:_hiddenPopoverController - willPresentViewController:self.masterViewController]; - } - - // Show popover. - [_hiddenPopoverController presentPopoverFromBarButtonItem:_barButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; + if (_hiddenPopoverController) { + if (_hiddenPopoverController.popoverVisible) { + [_hiddenPopoverController dismissPopoverAnimated:YES]; + } + else { + // Inform delegate. + if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:popoverController:willPresentViewController:)]) { + [(NSObject *)_delegate splitViewController:self + popoverController:_hiddenPopoverController + willPresentViewController:self.masterViewController]; + } + + // Show popover. + [_hiddenPopoverController presentPopoverFromBarButtonItem:_barButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; + } } } From 71ff95d988a8c162bdb8f3ce709b43054b7be11d Mon Sep 17 00:00:00 2001 From: Maik Gosenshuis Date: Thu, 3 Mar 2011 14:07:26 +0100 Subject: [PATCH 2/5] Default the title of the bar button item to the master view controller's title. --- Classes/MGSplitViewController.m | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Classes/MGSplitViewController.m b/Classes/MGSplitViewController.m index 2177ef2..30c9518 100644 --- a/Classes/MGSplitViewController.m +++ b/Classes/MGSplitViewController.m @@ -561,7 +561,11 @@ - (void)reconfigureForMasterInPopover:(BOOL)inPopover [self.masterViewController viewDidDisappear:NO]; // Create and configure _barButtonItem. - _barButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Master", nil) + NSString *barButtonItemTitle = self.masterViewController.title; + if (barButtonItemTitle == nil) { + barButtonItemTitle = @"Master"; + } + _barButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(barButtonItemTitle, nil) style:UIBarButtonItemStyleBordered target:self action:@selector(showMasterPopover:)]; From f48c4ddec00a6229c15a6ce0c43d85c733b1cfab Mon Sep 17 00:00:00 2001 From: Jared Crawford Date: Sat, 16 Oct 2010 17:32:14 -0400 Subject: [PATCH 3/5] Fixed view sizing bug for using splitview in a UINavigationController --- Classes/MGSplitViewController.m | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Classes/MGSplitViewController.m b/Classes/MGSplitViewController.m index 30c9518..9763ba0 100644 --- a/Classes/MGSplitViewController.m +++ b/Classes/MGSplitViewController.m @@ -231,6 +231,11 @@ - (CGSize)splitViewSizeForOrientation:(UIInterfaceOrientation)theOrientation // Little bit ugly looking, but it'll still work even if they change the status bar height in future. float statusBarHeight = MAX((fullScreenRect.size.width - appFrame.size.width), (fullScreenRect.size.height - appFrame.size.height)); + float navigationBarHeight = 0; + if ((self.navigationController)&&(!self.navigationController.navigationBarHidden)) { + navigationBarHeight = self.navigationController.navigationBar.frame.size.height; + } + // Initially assume portrait orientation. float width = fullScreenRect.size.width; float height = fullScreenRect.size.height; @@ -243,6 +248,7 @@ - (CGSize)splitViewSizeForOrientation:(UIInterfaceOrientation)theOrientation // Account for status bar, which always subtracts from the height (since it's always at the top of the screen). height -= statusBarHeight; + height -= navigationBarHeight; return CGSizeMake(width, height); } From 47e9bacfaa566121e5c2974aefd5fa74524bcbf8 Mon Sep 17 00:00:00 2001 From: Maik Gosenshuis Date: Thu, 3 Mar 2011 14:58:25 +0100 Subject: [PATCH 4/5] Take tab bar into account when calculating available view size. --- Classes/MGSplitViewController.m | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Classes/MGSplitViewController.m b/Classes/MGSplitViewController.m index 9763ba0..b7a9348 100644 --- a/Classes/MGSplitViewController.m +++ b/Classes/MGSplitViewController.m @@ -235,6 +235,11 @@ - (CGSize)splitViewSizeForOrientation:(UIInterfaceOrientation)theOrientation if ((self.navigationController)&&(!self.navigationController.navigationBarHidden)) { navigationBarHeight = self.navigationController.navigationBar.frame.size.height; } + + CGFloat tabBarHeight = 0; + if (self.tabBarController) { + tabBarHeight = self.tabBarController.tabBar.frame.size.height; + } // Initially assume portrait orientation. float width = fullScreenRect.size.width; @@ -249,6 +254,7 @@ - (CGSize)splitViewSizeForOrientation:(UIInterfaceOrientation)theOrientation // Account for status bar, which always subtracts from the height (since it's always at the top of the screen). height -= statusBarHeight; height -= navigationBarHeight; + height -= tabBarHeight; return CGSizeMake(width, height); } From e04b93b1d6a5968bb9d39b20365422f184ea8c1e Mon Sep 17 00:00:00 2001 From: viteinfinite Date: Thu, 16 Dec 2010 13:15:37 -0800 Subject: [PATCH 5/5] Fixed crash: "Popovers cannot be presented from a view which does not have a window." --- Classes/MGSplitViewController.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Classes/MGSplitViewController.m b/Classes/MGSplitViewController.m index b7a9348..5db99c9 100644 --- a/Classes/MGSplitViewController.m +++ b/Classes/MGSplitViewController.m @@ -592,8 +592,9 @@ - (void)reconfigureForMasterInPopover:(BOOL)inPopover } else if (!inPopover && _hiddenPopoverController && _barButtonItem) { // I know this looks strange, but it fixes a bizarre issue with UIPopoverController leaving masterViewController's views in disarray. +if (self.view.window != nil) { [_hiddenPopoverController presentPopoverFromRect:CGRectZero inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO]; - + } // Remove master from popover and destroy popover, if it exists. [_hiddenPopoverController dismissPopoverAnimated:NO]; [_hiddenPopoverController release];