Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
*.pbxuser
*.perspectivev3
build
*.mode1v3
.DS_Store

9 changes: 9 additions & 0 deletions Classes/MGSplitViewController.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ typedef enum _MGSplitViewDividerStyle {
float _splitPosition;
BOOL _reconfigurePopup;
MGSplitViewDividerStyle _dividerStyle; // Meta-setting which configures several aspects of appearance and behaviour.
BOOL togglesMasterPopover;
}

@property (nonatomic, assign) IBOutlet id <MGSplitViewControllerDelegate> delegate;
Expand All @@ -50,11 +51,14 @@ typedef enum _MGSplitViewDividerStyle {

@property (nonatomic, readonly, getter=isLandscape) BOOL landscape; // returns YES if this view controller is in either of the two Landscape orientations, else NO.

@property (nonatomic, readwrite) BOOL togglesMasterPopover; // default is NO.

// Actions
- (IBAction)toggleSplitOrientation:(id)sender; // toggles split axis between vertical (left/right; default) and horizontal (top/bottom).
- (IBAction)toggleMasterBeforeDetail:(id)sender; // toggles position of master view relative to detail view.
- (IBAction)toggleMasterView:(id)sender; // toggles display of the master view in the current orientation.
- (IBAction)showMasterPopover:(id)sender; // shows the master view in a popover spawned from the provided barButtonItem, if it's currently hidden.
- (IBAction)hideMasterPopover:(id)sender; // hides the master view in a popover spawned from the provided barButtonItem, if it's currently shown.
- (void)notePopoverDismissed; // should rarely be needed, because you should not change the popover's delegate. If you must, then call this when it's dismissed.

// Conveniences for you, because I care.
Expand Down Expand Up @@ -103,6 +107,11 @@ typedef enum _MGSplitViewDividerStyle {
popoverController:(UIPopoverController*)pc
willPresentViewController:(UIViewController *)aViewController;

// Called when a popover containing the master view is going to be hidden so the delegate can take action like showing other popovers. This only happens if togglesMasterPopover is set to YES.
- (void)splitViewController:(MGSplitViewController*)svc
popoverController:(UIPopoverController*)pc
willDismissViewController:(UIViewController *)aViewController;

// Called when the split orientation will change (from vertical to horizontal, or vice versa).
- (void)splitViewController:(MGSplitViewController*)svc willChangeSplitOrientationToVertical:(BOOL)isVertical;

Expand Down
63 changes: 57 additions & 6 deletions Classes/MGSplitViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,8 @@ - (void)setup
- (void)dealloc
{
_delegate = nil;
[self.masterViewController release];
[self.detailViewController release];
[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
[_viewControllers release];
[_barButtonItem release];
Expand Down Expand Up @@ -419,8 +421,8 @@ - (void)layoutSubviewsForInterfaceOrientation:(UIInterfaceOrientation)theOrienta
}

// Create corner views if necessary.
MGSplitCornersView *leadingCorners; // top/left of screen in vertical/horizontal split.
MGSplitCornersView *trailingCorners; // bottom/right of screen in vertical/horizontal split.
MGSplitCornersView *leadingCorners = nil; // top/left of screen in vertical/horizontal split.
MGSplitCornersView *trailingCorners = nil; // bottom/right of screen in vertical/horizontal split.
if (!_cornerViews) {
CGRect cornerRect = CGRectMake(0, 0, 10, 10); // arbitrary, will be resized below.
leadingCorners = [[MGSplitCornersView alloc] initWithFrame:cornerRect];
Expand Down Expand Up @@ -564,7 +566,7 @@ - (void)reconfigureForMasterInPopover:(BOOL)inPopover
_barButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Master", nil)
style:UIBarButtonItemStyleBordered
target:self
action:@selector(showMasterPopover:)];
action:(self.togglesMasterPopover ? @selector(toggleMasterPopover:) : @selector(showMasterPopover:))];

// Inform delegate of this state of affairs.
if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:willHideViewController:withBarButtonItem:forPopoverController:)]) {
Expand Down Expand Up @@ -702,6 +704,36 @@ - (IBAction)toggleMasterView:(id)sender
}


- (void) setTogglesMasterPopover:(BOOL)flag {

togglesMasterPopover = flag;

if (!_barButtonItem)
return;

_barButtonItem.action = flag ? @selector(toggleMasterPopover:) : @selector(showMasterPopover:);

}

- (IBAction)toggleMasterPopover:(id)sender
{

if (!_hiddenPopoverController)
return;

if (_hiddenPopoverController.popoverVisible) {

[self hideMasterPopover:sender];

} else {

[self showMasterPopover:sender];

}

}


- (IBAction)showMasterPopover:(id)sender
{
if (_hiddenPopoverController && !(_hiddenPopoverController.popoverVisible)) {
Expand All @@ -718,6 +750,24 @@ - (IBAction)showMasterPopover:(id)sender
}


- (IBAction)hideMasterPopover:(id)sender
{

if(_hiddenPopoverController && _hiddenPopoverController.popoverVisible) {

if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:popoverController:willDismissViewController:)]) {

[(NSObject <MGSplitViewControllerDelegate> *)_delegate splitViewController:self popoverController:_hiddenPopoverController willDismissViewController:self.masterViewController];

}

[_hiddenPopoverController dismissPopoverAnimated:YES];

}

}


#pragma mark -
#pragma mark Accessors and properties

Expand Down Expand Up @@ -1068,7 +1118,7 @@ - (void)setDividerStyle:(MGSplitViewDividerStyle)newStyle
_dividerStyle = newStyle;

// Reconfigure general appearance and behaviour.
float cornerRadius;
float cornerRadius = 0.0f;
if (_dividerStyle == MGSplitViewDividerStyleThin) {
cornerRadius = MG_DEFAULT_CORNER_RADIUS;
_splitWidth = MG_DEFAULT_SPLIT_WIDTH;
Expand Down Expand Up @@ -1120,14 +1170,15 @@ - (NSArray *)cornerViews
@synthesize showsMasterInLandscape;
@synthesize vertical;
@synthesize delegate;
@synthesize viewControllers;
@synthesize viewControllers = _viewControllers;
@synthesize masterViewController;
@synthesize detailViewController;
@synthesize dividerView;
@synthesize dividerView = _dividerView;
@synthesize splitPosition;
@synthesize splitWidth;
@synthesize allowsDraggingDivider;
@synthesize dividerStyle;

@synthesize togglesMasterPopover;

@end