-
Notifications
You must be signed in to change notification settings - Fork 383
Expand file tree
/
Copy pathDetailViewController.m
More file actions
186 lines (133 loc) · 4.65 KB
/
DetailViewController.m
File metadata and controls
186 lines (133 loc) · 4.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
//
// DetailViewController.m
// MGSplitView
//
// Created by Matt Gemmell on 26/07/2010.
// Copyright Instinctive Code 2010.
//
#import "DetailViewController.h"
#import "RootViewController.h"
@interface DetailViewController ()
@property (nonatomic, retain) UIPopoverController *popoverController;
- (void)configureView;
@end
@implementation DetailViewController
@synthesize toolbar, popoverController, detailItem, detailDescriptionLabel;
#pragma mark -
#pragma mark Managing the detail item
// When setting the detail item, update the view and dismiss the popover controller if it's showing.
- (void)setDetailItem:(id)newDetailItem
{
if (detailItem != newDetailItem) {
[detailItem release];
detailItem = [newDetailItem retain];
// Update the view.
[self configureView];
}
if (popoverController != nil) {
[popoverController dismissPopoverAnimated:YES];
}
}
- (void)configureView
{
// Update the user interface for the detail item.
detailDescriptionLabel.text = [detailItem description];
toggleItem.title = ([splitController isShowingMaster]) ? @"Hide Master" : @"Show Master"; // "I... AM... THE MASTER!" Derek Jacobi. Gave me chills.
verticalItem.title = (splitController.vertical) ? @"Horizontal Split" : @"Vertical Split";
dividerStyleItem.title = (splitController.dividerStyle == MGSplitViewDividerStyleThin) ? @"Enable Dragging" : @"Disable Dragging";
masterBeforeDetailItem.title = (splitController.masterBeforeDetail) ? @"Detail First" : @"Master First";
}
#pragma mark -
#pragma mark Split view support
//- (void)splitViewController:(MGSplitViewController*)svc
// willHideViewController:(UIViewController *)aViewController
// withBarButtonItem:(UIBarButtonItem*)barButtonItem
// forPopoverController: (UIPopoverController*)pc
//{
// //NSLog(@"%@", NSStringFromSelector(_cmd));
//
// if (barButtonItem) {
// barButtonItem.title = @"Popover";
// NSMutableArray *items = [[toolbar items] mutableCopy];
// [items insertObject:barButtonItem atIndex:0];
// [toolbar setItems:items animated:YES];
// [items release];
// }
// self.popoverController = pc;
//}
// Called when the view is shown again in the split view, invalidating the button and popover controller.
- (void)splitViewController:(MGSplitViewController*)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
//NSLog(@"%@", NSStringFromSelector(_cmd));
if (barButtonItem) {
NSMutableArray *items = [[toolbar items] mutableCopy];
[items removeObject:barButtonItem];
[toolbar setItems:items animated:YES];
[items release];
}
self.popoverController = nil;
}
- (void)splitViewController:(MGSplitViewController*)svc
popoverController:(UIPopoverController*)pc
willPresentViewController:(UIViewController *)aViewController
{
//NSLog(@"%@", NSStringFromSelector(_cmd));
}
- (void)splitViewController:(MGSplitViewController*)svc willChangeSplitOrientationToVertical:(BOOL)isVertical
{
//NSLog(@"%@", NSStringFromSelector(_cmd));
}
- (void)splitViewController:(MGSplitViewController*)svc willMoveSplitToPosition:(float)position
{
//NSLog(@"%@", NSStringFromSelector(_cmd));
}
- (float)splitViewController:(MGSplitViewController *)svc constrainSplitPosition:(float)proposedPosition splitViewSize:(CGSize)viewSize
{
//NSLog(@"%@", NSStringFromSelector(_cmd));
return proposedPosition;
}
#pragma mark -
#pragma mark Actions
- (IBAction)toggleMasterView:(id)sender
{
[splitController toggleMasterView:sender];
[self configureView];
}
- (IBAction)toggleVertical:(id)sender
{
[splitController toggleSplitOrientation:self];
[self configureView];
}
- (IBAction)toggleDividerStyle:(id)sender
{
MGSplitViewDividerStyle newStyle = ((splitController.dividerStyle == MGSplitViewDividerStyleThin) ? MGSplitViewDividerStylePaneSplitter : MGSplitViewDividerStyleThin);
[splitController setDividerStyle:newStyle animated:YES];
[self configureView];
}
- (IBAction)toggleMasterBeforeDetail:(id)sender
{
[splitController toggleMasterBeforeDetail:sender];
[self configureView];
}
#pragma mark -
#pragma mark Rotation support
// Ensure that the view controller supports rotation and that the split view can therefore show in both portrait and landscape.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[self configureView];
}
- (void)dealloc
{
[popoverController release];
[toolbar release];
[detailItem release];
[detailDescriptionLabel release];
[super dealloc];
}
@end