Skip to content

Commit 99e7460

Browse files
fix issue #22
1 parent ce69995 commit 99e7460

9 files changed

Lines changed: 117 additions & 19 deletions

File tree

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,12 @@ In the implementation of your view controller
161161
[popoverController presentPopoverFromRect:button.bounds inView:button permittedArrowDirections:WYPopoverArrowDirectionAny animated:YES];
162162
}
163163

164-
- (BOOL)popoverControllerShouldDismiss:(WYPopoverController *)controller
164+
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)controller
165165
{
166166
return YES;
167167
}
168168

169-
- (void)popoverControllerDidDismiss:(WYPopoverController *)controller
169+
- (void)popoverControllerDidDismissPopover:(WYPopoverController *)controller
170170
{
171171
popoverController.delegate = nil;
172172
popoverController = nil;
@@ -244,8 +244,8 @@ When showing a popover controller, there are times when you will need to handle
244244

245245
Situations when handling is required:
246246

247-
* If the popover controller is presented from a target rectangle using the `-presentPopoverFromRect:inView:permittedArrowDirections:animated` method of WYPopoverController.
248-
* If the popover controller is presented from a bar button item that is removed after the rotation has finished.
247+
* If the popover controller is presented from a target rectangle using the `-presentPopoverFromRect:inView:permittedArrowDirections:animated` method of WYPopoverController. You can use `-popoverController:willRepositionPopoverToRect:inView:` method introduced in the **0.1.6 release** .
248+
* If the popover controller is presented from a bar button item that is removed after the rotation has finished .
249249

250250
### Change logs
251251

WYPopoverController/WYPopoverController.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Version 0.1.5
2+
Version 0.1.6-beta
33
44
WYPopoverController is available under the MIT license.
55
@@ -112,8 +112,9 @@ typedef NS_OPTIONS(NSUInteger, WYPopoverArrowDirection) {
112112
@protocol WYPopoverControllerDelegate <NSObject>
113113
@optional
114114

115-
- (BOOL)popoverControllerShouldDismiss:(WYPopoverController *)popoverController;
116-
- (void)popoverControllerDidDismiss:(WYPopoverController *)popoverController;
115+
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)popoverController;
116+
- (void)popoverControllerDidDismissPopover:(WYPopoverController *)popoverController;
117+
- (void)popoverController:(WYPopoverController *)popoverController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView **)view;
117118

118119
@end
119120

WYPopoverController/WYPopoverController.m

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Version 0.1.5
2+
Version 0.1.6-beta
33
44
WYPopoverController is available under the MIT license.
55
@@ -1862,9 +1862,9 @@ - (void)dismissPopoverAnimated:(BOOL)aAnimated callDelegate:(BOOL)callDelegate
18621862

18631863
if (callDelegate)
18641864
{
1865-
if (delegate && [delegate respondsToSelector:@selector(popoverControllerDidDismiss:)])
1865+
if (delegate && [delegate respondsToSelector:@selector(popoverControllerDidDismissPopover:)])
18661866
{
1867-
[delegate popoverControllerDidDismiss:self];
1867+
[delegate popoverControllerDidDismissPopover:self];
18681868
}
18691869
}
18701870
};
@@ -1918,9 +1918,9 @@ - (void)popoverOverlayView:(WYPopoverOverlayView*)aOverlayView didTouchAtPoint:(
19181918
{
19191919
BOOL shouldDismiss = !viewController.modalInPopover;
19201920

1921-
if (shouldDismiss && delegate && [delegate respondsToSelector:@selector(popoverControllerShouldDismiss:)])
1921+
if (shouldDismiss && delegate && [delegate respondsToSelector:@selector(popoverControllerShouldDismissPopover:)])
19221922
{
1923-
shouldDismiss = [delegate popoverControllerShouldDismiss:self];
1923+
shouldDismiss = [delegate popoverControllerShouldDismissPopover:self];
19241924
}
19251925

19261926
if (shouldDismiss)
@@ -2164,6 +2164,23 @@ - (void)didChangeDeviceOrientation:(NSNotification*)notification
21642164
inView = [barButtonItem valueForKey:@"view"];
21652165
rect = inView.bounds;
21662166
}
2167+
else if ([delegate respondsToSelector:@selector(popoverController:willRepositionPopoverToRect:inView:)])
2168+
{
2169+
CGRect anotherRect;
2170+
UIView *anotherInView;
2171+
2172+
[delegate popoverController:self willRepositionPopoverToRect:&anotherRect inView:&anotherInView];
2173+
2174+
if (&anotherRect != NULL)
2175+
{
2176+
rect = anotherRect;
2177+
}
2178+
2179+
if (&anotherInView != NULL)
2180+
{
2181+
inView = anotherInView;
2182+
}
2183+
}
21672184

21682185
[self positionPopover];
21692186
[containerView setNeedsDisplay];

WYPopoverController/WYStoryboardPopoverSegue.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Version 0.1.5
2+
Version 0.1.6-beta
33
44
WYPopoverController is available under the MIT license.
55

WYPopoverController/WYStoryboardPopoverSegue.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Version 0.1.5
2+
Version 0.1.6-beta
33
44
WYPopoverController is available under the MIT license.
55

demos/Demo/WYPopoverDemo/WYAllDirectionsViewController.m

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ @interface WYAllDirectionsViewController () <WYPopoverControllerDelegate>
1313
{
1414
WYPopoverController* settingsPopoverController;
1515
WYPopoverController* anotherPopoverController;
16+
WYPopoverController* datePopoverController;
1617
}
1718

1819
- (IBAction)showPopover:(id)sender;
@@ -62,6 +63,7 @@ - (IBAction)showPopover:(id)sender
6263
{
6364
UIView* btn = (UIView*)sender;
6465

66+
/*
6567
WYSettingsViewController *settingsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"WYSettingsViewController"];
6668
6769
if ([settingsViewController respondsToSelector:@selector(setPreferredContentSize:)]) {
@@ -84,6 +86,31 @@ - (IBAction)showPopover:(id)sender
8486
settingsPopoverController.popoverLayoutMargins = UIEdgeInsetsMake(10, 10, 10, 10);
8587
settingsPopoverController.wantsDefaultContentAppearance = NO;
8688
[settingsPopoverController presentPopoverFromRect:btn.bounds inView:btn permittedArrowDirections:WYPopoverArrowDirectionAny animated:YES];
89+
*/
90+
91+
UIViewController *vc = [[UIViewController alloc] init];
92+
93+
vc.view = [[UIDatePicker alloc] init];
94+
vc.title = @"Data";
95+
96+
datePopoverController = [[WYPopoverController alloc] initWithContentViewController:[[UINavigationController alloc] initWithRootViewController:vc]];
97+
98+
CGSize viewSize = vc.view.bounds.size;
99+
100+
NSLog(@"viewSize = %@", NSStringFromCGSize(viewSize)); // ---> height is 216 instead of 162
101+
102+
if ([vc respondsToSelector:@selector(setPreferredContentSize:)])
103+
{
104+
viewSize.height = 162;
105+
vc.edgesForExtendedLayout = UIRectEdgeNone;
106+
vc.preferredContentSize = viewSize;
107+
}
108+
else
109+
{
110+
vc.contentSizeForViewInPopover = viewSize;
111+
}
112+
113+
[datePopoverController presentPopoverFromRect:btn.bounds inView:btn permittedArrowDirections:WYPopoverArrowDirectionAny animated:YES];
87114
}
88115
else
89116
{
@@ -112,12 +139,12 @@ - (void)done:(id)sender
112139

113140
#pragma mark - WYPopoverControllerDelegate
114141

115-
- (BOOL)popoverControllerShouldDismiss:(WYPopoverController *)controller
142+
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)controller
116143
{
117144
return YES;
118145
}
119146

120-
- (void)popoverControllerDidDismiss:(WYPopoverController *)controller
147+
- (void)popoverControllerDidDismissPopover:(WYPopoverController *)controller
121148
{
122149
if (controller == settingsPopoverController)
123150
{
@@ -155,6 +182,15 @@ - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
155182
return UIInterfaceOrientationPortrait;
156183
}
157184

185+
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
186+
{
187+
[UIView animateWithDuration:duration animations:^{
188+
CGRect frame = self.bottomRightButton.frame;
189+
frame.origin.y = (UIInterfaceOrientationIsPortrait(toInterfaceOrientation) ? self.bottomLeftButton.frame.origin.y : frame.origin.y - frame.size.height * 1.25f);
190+
self.bottomRightButton.frame = frame;
191+
}];
192+
}
193+
158194
#pragma mark - Memory Management
159195

160196
- (void)didReceiveMemoryWarning

demos/Demo/WYPopoverDemo/WYStoryboard.storyboard

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,50 @@
217217
</objects>
218218
<point key="canvasLocation" x="5058" y="-75"/>
219219
</scene>
220+
<!--View Controller-->
221+
<scene sceneID="Pb1-RX-Bgj">
222+
<objects>
223+
<viewController id="3gg-Fc-gp2" sceneMemberID="viewController">
224+
<view key="view" contentMode="scaleToFill" id="VFT-XI-T8U">
225+
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
226+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
227+
<subviews>
228+
<datePicker contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" datePickerMode="dateAndTime" minuteInterval="1" id="mHh-qb-i3T">
229+
<rect key="frame" x="0.0" y="50" width="320" height="162"/>
230+
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
231+
<date key="date" timeIntervalSinceReferenceDate="402404376.16816503">
232+
<!--2013-10-02 10:59:36 +0000-->
233+
</date>
234+
<timeZone key="timeZone" name="America/Los_Angeles">
235+
<mutableData key="data">
236+
VFppZgAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAC5AAAABAAAABCepkign7sVkKCGKqChmveQ
237+
y4kaoNIj9HDSYSYQ1v50INiArZDa/tGg28CQENzes6DdqayQ3r6VoN+JjpDgnneg4WlwkOJ+WaDjSVKQ
238+
5F47oOUpNJDmR1gg5xJREOgnOiDo8jMQ6gccIOrSFRDr5v4g7LH3EO3G4CDukdkQ76/8oPBxuxDxj96g
239+
8n/BkPNvwKD0X6OQ9U+ioPY/hZD3L4Sg+CiiEPkPZqD6CIQQ+viDIPvoZhD82GUg/chIEP64RyD/qCoQ
240+
AJgpIAGIDBACeAsgA3EokARhJ6AFUQqQBkEJoAcw7JAHjUOgCRDOkAmtvyAK8LCQC+CvoAzZzRANwJGg
241+
DrmvEA+priAQmZEQEYmQIBJ5cxATaXIgFFlVEBVJVCAWOTcQFyk2IBgiU5AZCRggGgI1kBryNKAb4heQ
242+
HNIWoB3B+ZAesfigH6HbkCB2KyAhgb2QIlYNICNq2hAkNe8gJUq8ECYV0SAnKp4QJ/7toCkKgBAp3s+g
243+
KupiECu+saAs036QLZ6ToC6zYJAvfnWgMJNCkDFnkiAycySQM0d0IDRTBpA1J1YgNjLokDcHOCA4HAUQ
244+
OOcaIDn75xA6xvwgO9vJEDywGKA9u6sQPo/6oD+bjRBAb9ygQYSpkEJPvqBDZIuQRC+goEVEbZBF89Mg
245+
Ry2KEEfTtSBJDWwQSbOXIErtThBLnLOgTNZqkE18laBOtkyQT1x3oFCWLpBRPFmgUnYQkFMcO6BUVfKQ
246+
VPwdoFY11JBW5TogWB7xEFjFHCBZ/tMQWqT+IFvetRBchOAgXb6XEF5kwiBfnnkQYE3eoGGHlZBiLcCg
247+
Y2d3kGQNoqBlR1mQZe2EoGcnO5BnzWagaQcdkGmtSKBq5v+Qa5ZlIGzQHBBtdkcgbq/+EG9WKSBwj+AQ
248+
cTYLIHJvwhBzFe0gdE+kEHT/CaB2OMCQdt7roHgYopB4vs2gefiEkHqer6B72GaQfH6RoH24SJB+XnOg
249+
f5gqkAABAAECAwEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
250+
AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
251+
AQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA
252+
AQABAAEAAQAB//+dkAEA//+PgAAE//+dkAEI//+dkAEMUERUAFBTVABQV1QAUFBUAAAAAAEAAAABA
253+
</mutableData>
254+
</timeZone>
255+
</datePicker>
256+
</subviews>
257+
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
258+
</view>
259+
</viewController>
260+
<placeholder placeholderIdentifier="IBFirstResponder" id="tPV-ft-NBj" userLabel="First Responder" sceneMemberID="firstResponder"/>
261+
</objects>
262+
<point key="canvasLocation" x="4771" y="603"/>
263+
</scene>
220264
</scenes>
221265
<simulatedMetricsContainer key="defaultSimulatedMetrics">
222266
<simulatedStatusBarMetrics key="statusBar"/>

demos/DemoSegue/WYPopoverDemoSegue/WYGesturesViewController.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ - (IBAction)buttonTap:(id)sender
3030
[popoverController presentPopoverFromRect:view.bounds inView:view permittedArrowDirections:WYPopoverArrowDirectionAny animated:YES];
3131
}
3232

33-
- (BOOL)popoverControllerShouldDismiss:(WYPopoverController *)aPopoverController
33+
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)aPopoverController
3434
{
3535
return YES;
3636
}

demos/DemoSegue/WYPopoverDemoSegue/WYPlayersViewController.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,12 @@ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
6666

6767
#pragma mark - WYPopoverControllerDelegate
6868

69-
- (BOOL)popoverControllerShouldDismiss:(WYPopoverController *)aPopoverController
69+
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)aPopoverController
7070
{
7171
return YES;
7272
}
7373

74-
- (void)popoverControllerDidDismiss:(WYPopoverController *)aPopoverController
74+
- (void)popoverControllerDidDismissPopover:(WYPopoverController *)aPopoverController
7575
{
7676
if (aPopoverController == playerDetailsPopoverController)
7777
{

0 commit comments

Comments
 (0)