Skip to content

Commit ceded0c

Browse files
fix issue #50
1 parent a808070 commit ceded0c

7 files changed

Lines changed: 219 additions & 66 deletions

File tree

WYPopoverController/WYPopoverController.m

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1403,18 +1403,25 @@ - (UIView *)rootView
14031403
{
14041404
UIWindow *result = [[UIApplication sharedApplication] keyWindow];
14051405

1406-
if (result.subviews.count > 0)
1406+
int count = result.subviews.count;
1407+
1408+
if (count > 0)
14071409
{
1408-
for (UIView *view in result.subviews)
1410+
UIView *view = nil;
1411+
1412+
for (NSUInteger i = count; i <= 0; i--)
14091413
{
1410-
if(!view.isHidden)
1414+
view = [result.subviews objectAtIndex:i];
1415+
1416+
if (!view.isHidden)
14111417
{
14121418
return view;
14131419
}
14141420
}
1421+
14151422
// result = [result.subviews lastObject];
14161423
}
1417-
1424+
14181425
return result;
14191426
}
14201427

@@ -2278,6 +2285,9 @@ - (CGSize)sizeForRect:(CGRect)aRect
22782285

22792286
#pragma mark Inline functions
22802287

2288+
#pragma clang diagnostic push
2289+
#pragma clang diagnostic ignored "-Wunused-variable"
2290+
22812291
static NSString* NSStringFromOrientation(NSInteger orientation) {
22822292
NSString* result = @"Unknown";
22832293

@@ -2301,6 +2311,8 @@ - (CGSize)sizeForRect:(CGRect)aRect
23012311
return result;
23022312
}
23032313

2314+
#pragma clang diagnostic pop
2315+
23042316
static CGFloat GetStatusBarHeight() {
23052317
UIInterfaceOrientation orienation = [[UIApplication sharedApplication] statusBarOrientation];
23062318

demos/Demo/WYPopoverDemo.xcodeproj/project.pbxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
9722D80617C1667E000D922B /* button-normal.png in Resources */ = {isa = PBXBuildFile; fileRef = 9722D80217C1667E000D922B /* button-normal.png */; };
1313
9722D80717C1667E000D922B /* button-normal@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9722D80317C1667E000D922B /* button-normal@2x.png */; };
1414
97635BCA17D118A700B642AC /* WYStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97635BC917D118A700B642AC /* WYStoryboard.storyboard */; };
15+
9767EC6518354C73007D283B /* WYModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9767EC6418354C73007D283B /* WYModalViewController.m */; };
1516
976A341F17BB9AEB0071BF21 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 976A341E17BB9AEB0071BF21 /* UIKit.framework */; };
1617
976A342117BB9AEB0071BF21 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 976A342017BB9AEB0071BF21 /* Foundation.framework */; };
1718
976A342317BB9AEB0071BF21 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 976A342217BB9AEB0071BF21 /* CoreGraphics.framework */; };
@@ -35,6 +36,8 @@
3536
9722D80217C1667E000D922B /* button-normal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "button-normal.png"; sourceTree = "<group>"; };
3637
9722D80317C1667E000D922B /* button-normal@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "button-normal@2x.png"; sourceTree = "<group>"; };
3738
97635BC917D118A700B642AC /* WYStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = WYStoryboard.storyboard; sourceTree = "<group>"; };
39+
9767EC6318354C73007D283B /* WYModalViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WYModalViewController.h; sourceTree = "<group>"; };
40+
9767EC6418354C73007D283B /* WYModalViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WYModalViewController.m; sourceTree = "<group>"; };
3841
976A341B17BB9AEB0071BF21 /* WYPopoverDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WYPopoverDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
3942
976A341E17BB9AEB0071BF21 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
4043
976A342017BB9AEB0071BF21 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
@@ -130,6 +133,8 @@
130133
976A342D17BB9AEB0071BF21 /* WYAppDelegate.h */,
131134
976A342E17BB9AEB0071BF21 /* WYAppDelegate.m */,
132135
97635BC917D118A700B642AC /* WYStoryboard.storyboard */,
136+
9767EC6318354C73007D283B /* WYModalViewController.h */,
137+
9767EC6418354C73007D283B /* WYModalViewController.m */,
133138
);
134139
path = WYPopoverDemo;
135140
sourceTree = "<group>";
@@ -245,6 +250,7 @@
245250
976A344A17BBAA4C0071BF21 /* WYSettingsViewController.m in Sources */,
246251
97B3CB2F17CD57910005E1A1 /* WYAnotherViewController.m in Sources */,
247252
97FA5C3017D1A82E00F611A0 /* WYPopoverController.m in Sources */,
253+
9767EC6518354C73007D283B /* WYModalViewController.m in Sources */,
248254
97FA5C3117D1A82E00F611A0 /* WYStoryboardPopoverSegue.m in Sources */,
249255
);
250256
runOnlyForDeploymentPostprocessing = 0;

demos/Demo/WYPopoverDemo/WYAllDirectionsViewController.m

Lines changed: 24 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
#import "WYAllDirectionsViewController.h"
99
#import "WYSettingsViewController.h"
1010
#import "WYAnotherViewController.h"
11+
#import "WYModalViewController.h"
1112

1213
@interface WYAllDirectionsViewController () <WYPopoverControllerDelegate>
1314
{
14-
WYPopoverController* settingsPopoverController;
1515
WYPopoverController* anotherPopoverController;
16+
WYPopoverController* settingsPopoverController;
1617
}
1718

18-
- (IBAction)showPopover:(id)sender;
19+
- (IBAction)open:(id)sender;
1920

2021
@end
2122

@@ -56,7 +57,21 @@ - (void)viewDidLoad
5657
[bottomRightButton setBackgroundImage:normal forState:UIControlStateNormal]; [bottomRightButton setBackgroundImage:highlighted forState:UIControlStateHighlighted];
5758
}
5859

59-
- (IBAction)showPopover:(id)sender
60+
- (IBAction)open:(id)sender
61+
{
62+
[self showmodal:sender];
63+
}
64+
65+
- (IBAction)showmodal:(id)sender
66+
{
67+
WYModalViewController *modalViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"WYModalViewController"];
68+
69+
modalViewController.modalPresentationStyle = UIModalPresentationFormSheet;
70+
71+
[self presentViewController:modalViewController animated:YES completion:NULL];
72+
}
73+
74+
- (IBAction)showpopover:(id)sender
6075
{
6176
if (settingsPopoverController == nil)
6277
{
@@ -90,10 +105,6 @@ - (IBAction)showPopover:(id)sender
90105
animated:YES
91106
options:WYPopoverAnimationOptionFadeWithScale];
92107
}
93-
else
94-
{
95-
[self done:nil];
96-
}
97108
}
98109

99110
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
@@ -106,15 +117,6 @@ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
106117
}
107118
}
108119

109-
#pragma mark - Selectors
110-
111-
- (void)done:(id)sender
112-
{
113-
[settingsPopoverController dismissPopoverAnimated:YES];
114-
settingsPopoverController.delegate = nil;
115-
settingsPopoverController = nil;
116-
}
117-
118120
#pragma mark - WYPopoverControllerDelegate
119121

120122
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)controller
@@ -124,16 +126,16 @@ - (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)controller
124126

125127
- (void)popoverControllerDidDismissPopover:(WYPopoverController *)controller
126128
{
127-
if (controller == settingsPopoverController)
128-
{
129-
settingsPopoverController.delegate = nil;
130-
settingsPopoverController = nil;
131-
}
132-
else if (controller == anotherPopoverController)
129+
if (controller == anotherPopoverController)
133130
{
134131
anotherPopoverController.delegate = nil;
135132
anotherPopoverController = nil;
136133
}
134+
else if (controller == settingsPopoverController)
135+
{
136+
settingsPopoverController.delegate = nil;
137+
settingsPopoverController = nil;
138+
}
137139
}
138140

139141
#pragma mark - UIViewControllerRotation
@@ -177,28 +179,3 @@ - (void)didReceiveMemoryWarning
177179
}
178180

179181
@end
180-
181-
182-
183-
184-
185-
186-
187-
188-
189-
190-
191-
192-
193-
194-
195-
196-
197-
198-
199-
200-
201-
202-
203-
204-

demos/Demo/WYPopoverDemo/WYAppDelegate.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
4848
4949
[popoverAppearance setViewContentInsets:UIEdgeInsetsMake(3, 0, 0, 0)];
5050
*/
51-
UINavigationBar *navBarAppearance = [UINavigationBar appearanceWhenContainedIn:[WYPopoverBackgroundView class], [UINavigationController class], nil];
51+
UINavigationBar *navBarAppearance = [UINavigationBar appearanceWhenContainedIn:[UINavigationController class], [WYPopoverBackgroundView class], nil];
5252
[navBarAppearance setTitleTextAttributes:@{
5353
UITextAttributeTextColor : [UIColor whiteColor],
5454
UITextAttributeTextShadowColor: [UIColor clearColor],
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//
2+
// WYModalViewController.h
3+
// WYPopoverDemo
4+
//
5+
// Created by Nicolas CHENG on 14/11/13.
6+
// Copyright (c) 2013 Nicolas CHENG. All rights reserved.
7+
//
8+
9+
#import <UIKit/UIKit.h>
10+
11+
@interface WYModalViewController : UIViewController
12+
13+
@end
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
//
2+
// WYModalViewController.m
3+
// WYPopoverDemo
4+
//
5+
// Created by Nicolas CHENG on 14/11/13.
6+
// Copyright (c) 2013 Nicolas CHENG. All rights reserved.
7+
//
8+
9+
#import "WYModalViewController.h"
10+
11+
#import "WYSettingsViewController.h"
12+
13+
@interface WYModalViewController () <WYPopoverControllerDelegate>
14+
{
15+
WYPopoverController *settingsPopoverController;
16+
}
17+
18+
- (IBAction)showpopover:(id)sender;
19+
20+
@end
21+
22+
@implementation WYModalViewController
23+
24+
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
25+
{
26+
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
27+
if (self) {
28+
// Custom initialization
29+
}
30+
return self;
31+
}
32+
33+
- (void)viewDidLoad
34+
{
35+
[super viewDidLoad];
36+
// Do any additional setup after loading the view.
37+
}
38+
39+
- (IBAction)showpopover:(id)sender
40+
{
41+
if (settingsPopoverController == nil)
42+
{
43+
UIView* btn = (UIView*)sender;
44+
45+
WYSettingsViewController *settingsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"WYSettingsViewController"];
46+
47+
if ([settingsViewController respondsToSelector:@selector(setPreferredContentSize:)]) {
48+
settingsViewController.preferredContentSize = CGSizeMake(280, 200); // iOS 7
49+
}
50+
else {
51+
settingsViewController.contentSizeForViewInPopover = CGSizeMake(280, 200); // iOS < 7
52+
}
53+
54+
settingsViewController.title = @"Settings";
55+
[settingsViewController.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)]];
56+
57+
settingsViewController.modalInPopover = NO;
58+
59+
UINavigationController* contentViewController = [[UINavigationController alloc] initWithRootViewController:settingsViewController];
60+
61+
settingsPopoverController = [[WYPopoverController alloc] initWithContentViewController:contentViewController];
62+
settingsPopoverController.delegate = self;
63+
settingsPopoverController.passthroughViews = @[btn];
64+
settingsPopoverController.popoverLayoutMargins = UIEdgeInsetsMake(10, 10, 10, 10);
65+
settingsPopoverController.wantsDefaultContentAppearance = NO;
66+
67+
[settingsPopoverController presentPopoverFromRect:btn.bounds
68+
inView:btn
69+
permittedArrowDirections:WYPopoverArrowDirectionAny
70+
animated:YES
71+
options:WYPopoverAnimationOptionFadeWithScale];
72+
}
73+
else
74+
{
75+
[self done:nil];
76+
}
77+
}
78+
79+
#pragma mark - Selectors
80+
81+
- (void)done:(id)sender
82+
{
83+
[settingsPopoverController dismissPopoverAnimated:YES];
84+
settingsPopoverController.delegate = nil;
85+
settingsPopoverController = nil;
86+
}
87+
88+
#pragma mark - WYPopoverControllerDelegate
89+
90+
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)controller
91+
{
92+
return YES;
93+
}
94+
95+
- (void)popoverControllerDidDismissPopover:(WYPopoverController *)controller
96+
{
97+
if (controller == settingsPopoverController)
98+
{
99+
settingsPopoverController.delegate = nil;
100+
settingsPopoverController = nil;
101+
}
102+
}
103+
104+
#pragma mark - Memory Management
105+
106+
- (void)didReceiveMemoryWarning
107+
{
108+
[super didReceiveMemoryWarning];
109+
// Dispose of any resources that can be recreated.
110+
}
111+
112+
@end

0 commit comments

Comments
 (0)