Skip to content

Commit aa4d6e0

Browse files
fix issue #20
1 parent 7dfd2a8 commit aa4d6e0

10 files changed

Lines changed: 130 additions & 50 deletions

README.md

Lines changed: 62 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,41 @@ Add this line `pod 'WYPopoverController', '~> 0.1.2'` to your PodFile or add man
100100

101101
##### Simple
102102

103+
In the implementation of your view controller
104+
103105
```objective-c
104-
WYPopoverController* popoverController = [[WYPopoverController alloc] initWithContentViewController:controller];
105-
popoverController.delegate = self;
106-
[popoverController presentPopoverFromRect:button.bounds inView:button permittedArrowDirections:WYPopoverArrowDirectionAny animated:YES];
106+
// YourViewController.m
107+
108+
@interface YourViewController () <WYPopoverControllerDelegate>
109+
{
110+
WYPopoverController* popoverController;
111+
}
112+
113+
- (IBAction)showPopover:(id)sender;
114+
115+
@end
116+
117+
@implementation YourViewController
118+
119+
- (IBAction)showPopover:(id)sender
120+
{
121+
popoverController = [[WYPopoverController alloc] initWithContentViewController:controller];
122+
popoverController.delegate = self;
123+
[popoverController presentPopoverFromRect:button.bounds inView:button permittedArrowDirections:WYPopoverArrowDirectionAny animated:YES];
124+
}
125+
126+
- (BOOL)popoverControllerShouldDismiss:(WYPopoverController *)controller
127+
{
128+
return YES;
129+
}
130+
131+
- (void)popoverControllerDidDismiss:(WYPopoverController *)controller
132+
{
133+
popoverController.delegate = nil;
134+
popoverController = nil;
135+
}
136+
137+
@end
107138
```
108139
109140
##### Appearance (Tint Color)
@@ -116,36 +147,37 @@ WYPopoverBackgroundView* appearance = [WYPopoverBackgroundView appearance];
116147
##### Appearance (Flat Popover)
117148

118149
```objective-c
119-
WYPopoverBackgroundView* appearance = [WYPopoverBackgroundView appearance];
120-
121-
[appearance setOuterCornerRadius:4];
122-
[appearance setOuterShadowBlurRadius:0];
123-
[appearance setOuterShadowColor:[UIColor clearColor]];
124-
[appearance setOuterShadowOffset:CGSizeMake(0, 0)];
150+
UIColor* greenColor = [UIColor colorWithRed:26.f/255.f green:188.f/255.f blue:156.f/255.f alpha:1];
151+
152+
WYPopoverBackgroundView* popoverAppearance = [WYPopoverBackgroundView appearance];
125153

126-
[appearance setGlossShadowColor:[UIColor clearColor]];
127-
[appearance setGlossShadowOffset:CGSizeMake(0, 0)];
154+
[popoverAppearance setOuterCornerRadius:4];
155+
[popoverAppearance setOuterShadowBlurRadius:0];
156+
[popoverAppearance setOuterShadowColor:[UIColor clearColor]];
157+
[popoverAppearance setOuterShadowOffset:CGSizeMake(0, 0)];
128158

129-
[appearance setBorderWidth:8];
130-
[appearance setArrowHeight:10];
131-
[appearance setArrowBase:20];
159+
[popoverAppearance setGlossShadowColor:[UIColor clearColor]];
160+
[popoverAppearance setGlossShadowOffset:CGSizeMake(0, 0)];
132161

133-
[appearance setInnerCornerRadius:4];
134-
[appearance setInnerShadowBlurRadius:0];
135-
[appearance setInnerShadowColor:[UIColor clearColor]];
136-
[appearance setInnerShadowOffset:CGSizeMake(0, 0)];
162+
[popoverAppearance setBorderWidth:8];
163+
[popoverAppearance setArrowHeight:10];
164+
[popoverAppearance setArrowBase:20];
137165

138-
UIColor* greenColor = [UIColor colorWithRed:26.f/255.f green:188.f/255.f blue:156.f/255.f alpha:1];
166+
[popoverAppearance setInnerCornerRadius:4];
167+
[popoverAppearance setInnerShadowBlurRadius:0];
168+
[popoverAppearance setInnerShadowColor:[UIColor clearColor]];
169+
[popoverAppearance setInnerShadowOffset:CGSizeMake(0, 0)];
139170

140-
[appearance setFillTopColor:greenColor];
141-
[appearance setFillBottomColor:greenColor];
142-
[appearance setStrokeColor:greenColor];
171+
[popoverAppearance setFillTopColor:greenColor];
172+
[popoverAppearance setFillBottomColor:greenColor];
173+
[popoverAppearance setOuterStrokeColor:greenColor];
174+
[popoverAppearance setInnerStrokeColor:greenColor];
143175

144-
UINavigationBar* appearance2 = [UINavigationBar appearanceWhenContainedIn:[UINavigationController class], nil];
145-
[appearance2 setTitleTextAttributes:@{
176+
UINavigationBar* navBarInPopoverAppearance = [UINavigationBar appearanceWhenContainedIn:[UINavigationController class], [WYPopoverController class], nil];
177+
[navBarInPopoverAppearance setTitleTextAttributes: @{
146178
UITextAttributeTextColor : [UIColor whiteColor],
147-
UITextAttributeTextShadowColor: [UIColor clearColor],
148-
UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0, -1)]}];
179+
UITextAttributeTextShadowColor : [UIColor clearColor],
180+
UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetMake(0, -1)]}];
149181
```
150182
151183
##### Storyboard
@@ -156,6 +188,10 @@ UINavigationBar* appearance2 = [UINavigationBar appearanceWhenContainedIn:[UINav
156188
if ([segue.identifier isEqualToString:@"[YOUR_SEGUE_IDENTIFIER]"])
157189
{
158190
WYStoryboardPopoverSegue* popoverSegue = (WYStoryboardPopoverSegue*)segue;
191+
192+
UIViewController* destinationViewController = (UIViewController *)segue.destinationViewController;
193+
destinationViewController.contentSizeForViewInPopover = CGSizeMake(280, 280); // Deprecated in iOS7. Use 'preferredContentSize' instead.
194+
159195
popoverController = [popoverSegue popoverControllerWithSender:sender permittedArrowDirections:WYPopoverArrowDirectionAny animated:YES];
160196
popoverController.delegate = self;
161197
}

WYPopoverController/WYPopoverController.m

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1265,6 +1265,7 @@ @interface WYPopoverController () <WYPopoverOverlayViewDelegate>
12651265

12661266
@property (nonatomic, strong, readonly) UIView *rootView;
12671267
@property (nonatomic, strong, readonly) UIColor *overlayColor;
1268+
@property (nonatomic, assign, readonly) CGSize contentSizeForViewInPopover;
12681269

12691270
- (void)dismissPopoverAnimated:(BOOL)animated callDelegate:(BOOL)callDelegate;
12701271

@@ -1337,6 +1338,31 @@ - (UIColor *)overlayColor
13371338
return result;
13381339
}
13391340

1341+
- (CGSize)contentSizeForViewInPopover
1342+
{
1343+
CGSize result = CGSizeZero;
1344+
1345+
if ([viewController respondsToSelector:@selector(preferredContentSize)])
1346+
{
1347+
result = viewController.preferredContentSize;
1348+
}
1349+
1350+
if (CGSizeEqualToSize(result, CGSizeZero))
1351+
{
1352+
#pragma clang diagnostic push
1353+
#pragma GCC diagnostic ignored "-Wdeprecated"
1354+
result = viewController.contentSizeForViewInPopover;
1355+
#pragma clang diagnostic pop
1356+
}
1357+
1358+
if (CGSizeEqualToSize(result, CGSizeZero))
1359+
{
1360+
result = CGSizeMake(320, 1100);
1361+
}
1362+
1363+
return result;
1364+
}
1365+
13401366
- (void)presentPopoverFromRect:(CGRect)aRect inView:(UIView *)aView permittedArrowDirections:(WYPopoverArrowDirection)arrowDirections animated:(BOOL)aAnimated
13411367
{
13421368
NSAssert((arrowDirections != WYPopoverArrowDirectionUnknown), @"WYPopoverArrowDirection must not be UNKNOWN");
@@ -1346,7 +1372,7 @@ - (void)presentPopoverFromRect:(CGRect)aRect inView:(UIView *)aView permittedArr
13461372
permittedArrowDirections = arrowDirections;
13471373
animated = aAnimated;
13481374

1349-
CGSize contentViewSize = viewController.contentSizeForViewInPopover;
1375+
CGSize contentViewSize = self.contentSizeForViewInPopover;
13501376

13511377
if (overlayView == nil)
13521378
{
@@ -1468,7 +1494,11 @@ - (void)drawPopoverNavigationBar
14681494

14691495
CGFloat navigationBarHeight = 44;
14701496

1471-
UIBezierPath *rectPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 20, navigationBarHeight)];
1497+
CGRect rectPathRect = CGRectMake(0, 0, 20, navigationBarHeight);
1498+
1499+
CGFloat cornerRadius = containerView.innerCornerRadius;
1500+
1501+
UIBezierPath *rectPath = [UIBezierPath bezierPathWithRoundedRect:rectPathRect byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight cornerRadii:CGSizeMake(cornerRadius, cornerRadius)];
14721502

14731503
UIGraphicsBeginImageContextWithOptions(rectPath.bounds.size, NO, 0.0f);
14741504

@@ -1509,7 +1539,7 @@ - (void)drawPopoverNavigationBar
15091539
CGGradientRelease(fillGradient);
15101540
CGColorSpaceRelease(colorSpace);
15111541

1512-
[navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
1542+
[navigationController.navigationBar setBackgroundImage:[image resizableImageWithCapInsets:UIEdgeInsetsMake(0, cornerRadius + 1, 0, cornerRadius + 1)] forBarMetrics:UIBarMetricsDefault];
15131543

15141544
// UIBarMetricsLandscapePhone
15151545

@@ -1529,14 +1559,19 @@ - (void)drawPopoverNavigationBar
15291559

15301560
UIGraphicsEndImageContext();
15311561

1532-
[navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsLandscapePhone];
1562+
[navigationController.navigationBar setBackgroundImage:[image resizableImageWithCapInsets:UIEdgeInsetsMake(0, cornerRadius + 1, 0, cornerRadius + 1)] forBarMetrics:UIBarMetricsLandscapePhone];
15331563
}
15341564

1565+
viewController.view.clipsToBounds = YES;
1566+
15351567
if (containerView.borderWidth == 0)
15361568
{
1537-
viewController.view.clipsToBounds = YES;
15381569
viewController.view.layer.cornerRadius = containerView.outerCornerRadius;
15391570
}
1571+
else
1572+
{
1573+
viewController.view.layer.cornerRadius = containerView.innerCornerRadius;
1574+
}
15401575
}
15411576

15421577
- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(WYPopoverArrowDirection)arrowDirections animated:(BOOL)aAnimated
@@ -1549,7 +1584,7 @@ - (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDi
15491584

15501585
- (void)positionPopover
15511586
{
1552-
CGSize contentViewSize = viewController.contentSizeForViewInPopover;
1587+
CGSize contentViewSize = self.contentSizeForViewInPopover;
15531588

15541589
CGRect viewFrame;
15551590
CGRect containerFrame = CGRectZero;

demos/Demo/WYPopoverDemo/WYAllDirectionsViewController.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,5 @@
2323
@property (nonatomic, weak) IBOutlet UIButton* bottomButton;
2424
@property (nonatomic, weak) IBOutlet UIButton* bottomRightButton;
2525

26-
- (IBAction)tapOnButton:(id)sender;
2726

2827
@end

demos/Demo/WYPopoverDemo/WYAllDirectionsViewController.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ @interface WYAllDirectionsViewController ()
1414
WYPopoverController* popoverController;
1515
}
1616

17+
- (IBAction)showPopover:(id)sender;
18+
1719
@end
1820

1921
////////////////////////////////////////////////////////////////////////////
@@ -48,7 +50,7 @@ - (void)viewDidLoad
4850
[bottomRightButton setBackgroundImage:normal forState:UIControlStateNormal]; [bottomRightButton setBackgroundImage:highlighted forState:UIControlStateHighlighted];
4951
}
5052

51-
- (IBAction)tapOnButton:(id)sender
53+
- (IBAction)showPopover:(id)sender
5254
{
5355
if (popoverController == nil)
5456
{

demos/Demo/WYPopoverDemo/WYAppDelegate.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
1919

2020
//Appearance 1 (white popover)
2121
//
22+
/*
2223
WYPopoverBackgroundView* popoverAppearance = [WYPopoverBackgroundView appearance];
2324
[popoverAppearance setTintColor:[UIColor whiteColor]];
2425
@@ -40,12 +41,15 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
4041
[popoverAppearance setInnerShadowColor:[UIColor colorWithWhite:0 alpha:0.75]];
4142
[popoverAppearance setInnerShadowOffset:CGSizeMake(0, 1)];
4243
44+
[popoverAppearance setViewContentInsets:UIEdgeInsetsMake(3, 0, 0, 0)];
45+
4346
UINavigationBar* navBarAppearance = [UINavigationBar appearanceWhenContainedIn:[WYPopoverBackgroundView class], [UINavigationController class], nil];
4447
[navBarAppearance setTitleTextAttributes:@{
4548
UITextAttributeTextColor : [UIColor darkGrayColor],
4649
UITextAttributeTextShadowColor: [UIColor whiteColor],
4750
UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0, -1)]
4851
}];
52+
*/
4953

5054
//Appearance 2 (orange popover)
5155
//

demos/Demo/WYPopoverDemo/WYModalViewController.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
3737
{
3838
WYStoryboardPopoverSegue* popoverSegue = (WYStoryboardPopoverSegue*)segue;
3939

40+
UIViewController* destinationViewController = (UIViewController *)segue.destinationViewController;
41+
42+
destinationViewController.contentSizeForViewInPopover = CGSizeMake(280, 280);
43+
4044
popoverController = [popoverSegue popoverControllerWithSender:sender permittedArrowDirections:WYPopoverArrowDirectionAny animated:YES];
4145

4246
popoverController.delegate = self;

demos/Demo/WYPopoverDemo/WYSettingsViewController.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,22 @@ - (void)viewDidLoad
3030

3131
- (void)viewWillAppear:(BOOL)animated
3232
{
33-
NSLog(@"view WILL appear");
33+
//NSLog(@"view WILL appear");
3434
}
3535

3636
- (void)viewDidAppear:(BOOL)animated
3737
{
38-
NSLog(@"view DID appear");
38+
//NSLog(@"view DID appear");
3939
}
4040

4141
- (void)viewWillDisappear:(BOOL)animated
4242
{
43-
NSLog(@"view WILL disappear");
43+
//NSLog(@"view WILL disappear");
4444
}
4545

4646
- (void)viewDidDisappear:(BOOL)animated
4747
{
48-
NSLog(@"view DID disappear");
48+
//NSLog(@"view DID disappear");
4949
}
5050

5151
- (void)didReceiveMemoryWarning

0 commit comments

Comments
 (0)