iOS: tweaked #825 (dark mode)

Eliminated the old WYPopoverController from the code, since it isn’t
needed and isn’t compatible with theming.  All popovers now use the
modern UIPopoverPresentationController mechanism.
This commit is contained in:
David Sinclair 2015-12-15 12:37:18 -08:00
parent 1b31f27276
commit 07e667a95d
20 changed files with 120 additions and 3717 deletions

View file

@ -133,10 +133,9 @@
- (IBAction)doCancelButton {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[appDelegate.masterContainerViewController hidePopover];
[self.appDelegate hidePopover];
} else {
[appDelegate.feedsViewController.popoverController dismissPopoverAnimated:YES];
appDelegate.feedsViewController.popoverController = nil;
[self.appDelegate hidePopoverAnimated:YES];
}
}
@ -310,12 +309,11 @@
[self.errorLabel setHidden:NO];
} else {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[appDelegate.masterContainerViewController hidePopover];
[self.appDelegate hidePopover];
} else {
[appDelegate.feedsViewController.popoverController dismissPopoverAnimated:YES];
appDelegate.feedsViewController.popoverController = nil;
[self.appDelegate hidePopoverAnimated:YES];
}
[appDelegate reloadFeedsView:NO];
[self.appDelegate reloadFeedsView:NO];
}
}

View file

@ -189,10 +189,9 @@
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[appDelegate.masterContainerViewController hidePopover];
[self.appDelegate hidePopover];
} else {
[appDelegate.feedDetailViewController.popoverController dismissPopoverAnimated:YES];
appDelegate.feedDetailViewController.popoverController = nil;
[self.appDelegate hidePopoverAnimated:YES];
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];

View file

@ -11,7 +11,6 @@
#import "ASIHTTPRequest.h"
#import "BaseViewController.h"
#import "Utilities.h"
#import "WYPopoverController.h"
#import "NBNotifier.h"
#import "MCSwipeTableViewCell.h"
@ -22,7 +21,7 @@
@interface FeedDetailViewController : BaseViewController
<UITableViewDelegate, UITableViewDataSource, UIAlertViewDelegate,
UIPopoverControllerDelegate, ASIHTTPRequestDelegate,
WYPopoverControllerDelegate, MCSwipeTableViewCellDelegate,
MCSwipeTableViewCellDelegate,
UIGestureRecognizerDelegate, UISearchBarDelegate> {
NewsBlurAppDelegate *appDelegate;
@ -37,7 +36,6 @@
UITableView * storyTitlesTable;
UIBarButtonItem * feedMarkReadButton;
WYPopoverController *popoverController;
Class popoverClass;
NBNotifier *notifier;
}
@ -50,7 +48,6 @@
@property (nonatomic) IBOutlet UIBarButtonItem * spacer2BarButton;
@property (nonatomic) IBOutlet UIBarButtonItem * separatorBarButton;
@property (nonatomic) IBOutlet UIBarButtonItem * titleImageBarButton;
@property (nonatomic, retain) WYPopoverController *popoverController;
@property (nonatomic, retain) NBNotifier *notifier;
@property (nonatomic, retain) StoriesCollection *storiesCollection;
@property (nonatomic) UISearchBar *searchBar;

View file

@ -23,7 +23,6 @@
#import "NSObject+SBJSON.h"
#import "StringHelper.h"
#import "Utilities.h"
#import "WYPopoverController.h"
#import "UIBarButtonItem+Image.h"
#import "FeedDetailMenuViewController.h"
#import "MarkReadMenuViewController.h"
@ -51,7 +50,6 @@
@implementation FeedDetailViewController
@synthesize popoverController;
@synthesize storyTitlesTable, feedMarkReadButton;
@synthesize settingsBarButton;
@synthesize separatorBarButton;
@ -87,7 +85,6 @@
name:UIContentSizeCategoryDidChangeNotification
object:nil];
popoverClass = [WYPopoverController class];
self.storyTitlesTable.backgroundColor = UIColorFromRGB(0xf4f4f4);
self.storyTitlesTable.separatorColor = UIColorFromRGB(0xE9E8E4);
@ -431,8 +428,7 @@
[super viewDidDisappear:animated];
[self.searchBar resignFirstResponder];
[self.popoverController dismissPopoverAnimated:YES];
self.popoverController = nil;
[self.appDelegate hidePopoverAnimated:YES];
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (self.isMovingToParentViewController) {
@ -1818,8 +1814,7 @@ didEndSwipingSwipingWithState:(MCSwipeTableViewCellState)state
}
- (IBAction)doOpenMarkReadMenu:(id)sender {
[self.popoverController dismissPopoverAnimated:YES];
self.popoverController = nil;
[self.appDelegate hidePopoverAnimated:YES];
void (^pop)(void) = ^{
if (!self.isPhoneOrCompact) {
@ -1865,30 +1860,13 @@ didEndSwipingSwipingWithState:(MCSwipeTableViewCellState)state
return;
}
if (!self.isPhoneOrCompact) {
[appDelegate.masterContainerViewController showFeedDetailMenuPopover:self.settingsBarButton];
} else {
if (self.popoverController == nil) {
self.popoverController = [[WYPopoverController alloc]
initWithContentViewController:(UIViewController *)appDelegate.feedDetailMenuViewController];
[appDelegate.feedDetailMenuViewController buildMenuOptions];
self.popoverController.delegate = self;
} else {
[self.popoverController dismissPopoverAnimated:YES];
self.popoverController = nil;
}
NSInteger menuCount = [appDelegate.feedDetailMenuViewController.menuOptions count] + 2;
[self.popoverController setPopoverContentSize:CGSizeMake(260, 38 * menuCount)];
[self.popoverController presentPopoverFromBarButtonItem:self.settingsBarButton
permittedArrowDirections:UIPopoverArrowDirectionUp
animated:YES];
}
[self.appDelegate.feedDetailMenuViewController buildMenuOptions];
[self.appDelegate.feedDetailMenuViewController view];
NSInteger menuCount = [self.appDelegate.feedDetailMenuViewController.menuOptions count] + 2;
[self.appDelegate showPopoverWithViewController:self.appDelegate.feedDetailMenuViewController contentSize:CGSizeMake(260, 38 * menuCount) barButtonItem:self.settingsBarButton];
}
- (void)confirmDeleteSite {
UIAlertView *deleteConfirm = [[UIAlertView alloc]
initWithTitle:@"Positive?"
@ -2247,17 +2225,4 @@ didEndSwipingSwipingWithState:(MCSwipeTableViewCellState)state
[appDelegate informError:error];
}
#pragma mark -
#pragma mark WYPopoverControllerDelegate implementation
- (void)popoverControllerDidDismissPopover:(WYPopoverController *)thePopoverController {
//Safe to release the popover here
self.popoverController = nil;
}
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)thePopoverController {
//The popover is automatically dismissed if you click outside it, unless you return NO here
return YES;
}
@end

View file

@ -126,10 +126,9 @@
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[appDelegate.masterContainerViewController hidePopover];
[self.appDelegate hidePopover];
} else {
[appDelegate.feedsViewController.popoverController dismissPopoverAnimated:YES];
appDelegate.feedsViewController.popoverController = nil;
[self.appDelegate hidePopoverAnimated:YES];
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];

View file

@ -25,6 +25,7 @@
@property (nonatomic) CALayer *leftBorder;
@property (nonatomic) CALayer *rightBorder;
@property (atomic, strong) IBOutlet NewsBlurAppDelegate *appDelegate;
@property (nonatomic, readonly) UINavigationController *masterNavigationController;
- (void)syncNextPreviousButtons;
@ -49,12 +50,6 @@
- (void)dragStoryToolbar:(int)yCoordinate;
- (void)showUserProfilePopover:(id)sender;
- (void)showFeedMenuPopover:(id)sender;
- (void)showFeedDetailMenuPopover:(id)sender;
- (void)showFontSettingsPopover:(id)sender;
- (void)showTrainingPopover:(id)sender;
- (void)showUserTagsPopover:(id)sender;
- (void)showSitePopover:(id)sender;
- (BOOL)hidePopoverAnimated:(BOOL)animated;
- (void)hidePopover;
@end

View file

@ -303,115 +303,39 @@
# pragma mark Modals and Popovers
- (void)showPopoverWithViewController:(UIViewController *)viewController contentSize:(CGSize)contentSize barButtonItem:(UIBarButtonItem *)barButtonItem {
[self showPopoverWithViewController:viewController contentSize:contentSize barButtonItem:barButtonItem sourceView:nil sourceRect:CGRectZero];
}
- (void)showPopoverWithViewController:(UIViewController *)viewController contentSize:(CGSize)contentSize sourceView:(UIView *)sourceView sourceRect:(CGRect)sourceRect {
[self showPopoverWithViewController:viewController contentSize:contentSize barButtonItem:nil sourceView:sourceView sourceRect:sourceRect];
}
- (void)showPopoverWithViewController:(UIViewController *)viewController contentSize:(CGSize)contentSize barButtonItem:(UIBarButtonItem *)barButtonItem sourceView:(UIView *)sourceView sourceRect:(CGRect)sourceRect {
if (viewController == self.masterNavigationController.presentedViewController)
return; // nothing to do, already showing this controller
[self hidePopoverAnimated:YES];
viewController.modalPresentationStyle = UIModalPresentationPopover;
viewController.preferredContentSize = contentSize;
UIPopoverPresentationController *popoverPresentationController = viewController.popoverPresentationController;
popoverPresentationController.delegate = self;
popoverPresentationController.backgroundColor = UIColorFromRGB(NEWSBLUR_WHITE_COLOR);
popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionAny;
if (barButtonItem) {
popoverPresentationController.barButtonItem = barButtonItem;
} else {
popoverPresentationController.sourceView = sourceView;
popoverPresentationController.sourceRect = sourceRect;
}
[self.masterNavigationController presentViewController:viewController animated:YES completion:nil];
}
- (void)showUserProfilePopover:(id)sender {
if ([sender class] == [InteractionCell class] ||
[sender class] == [ActivityCell class]) {
InteractionCell *cell = (InteractionCell *)sender;
[self showPopoverWithViewController:self.appDelegate.userProfileNavigationController contentSize:CGSizeMake(320, 454) sourceView:cell sourceRect:cell.bounds];
[self.appDelegate showPopoverWithViewController:self.appDelegate.userProfileNavigationController contentSize:CGSizeMake(320, 454) sourceView:cell sourceRect:cell.bounds];
} else if ([sender class] == [FeedTableCell class]) {
FeedTableCell *cell = (FeedTableCell *)sender;
[self showPopoverWithViewController:self.appDelegate.userProfileNavigationController contentSize:CGSizeMake(320, 454) sourceView:cell sourceRect:cell.bounds];
[self.appDelegate showPopoverWithViewController:self.appDelegate.userProfileNavigationController contentSize:CGSizeMake(320, 454) sourceView:cell sourceRect:cell.bounds];
} else if ([sender class] == [UIBarButtonItem class]) {
[self showPopoverWithViewController:self.appDelegate.userProfileNavigationController contentSize:CGSizeMake(320, 454) barButtonItem:sender];
[self.appDelegate showPopoverWithViewController:self.appDelegate.userProfileNavigationController contentSize:CGSizeMake(320, 454) barButtonItem:sender];
} else {
CGRect frame = [sender CGRectValue];
[self showPopoverWithViewController:self.appDelegate.userProfileNavigationController contentSize:CGSizeMake(320, 454) sourceView:self.storyPageControl.view sourceRect:frame];
[self.appDelegate showPopoverWithViewController:self.appDelegate.userProfileNavigationController contentSize:CGSizeMake(320, 454) sourceView:self.storyPageControl.view sourceRect:frame];
}
}
- (void)showSitePopover:(id)sender {
[self showPopoverWithViewController:self.appDelegate.addSiteViewController contentSize:CGSizeMake(320, 355) barButtonItem:sender];
}
- (void)showFeedMenuPopover:(id)sender {
[self.appDelegate.feedsMenuViewController view];
NSInteger menuCount = [self.appDelegate.feedsMenuViewController.menuOptions count];
[self showPopoverWithViewController:self.appDelegate.feedsMenuViewController contentSize:CGSizeMake(200, 38 * menuCount) barButtonItem:sender];
}
- (void)showFeedDetailMenuPopover:(id)sender {
[appDelegate.feedDetailMenuViewController buildMenuOptions];
[appDelegate.feedDetailMenuViewController view];
NSInteger menuCount = [self.appDelegate.feedDetailMenuViewController.menuOptions count] + 2;
[self showPopoverWithViewController:self.appDelegate.feedDetailMenuViewController contentSize:CGSizeMake(260, 38 * menuCount) barButtonItem:sender];
}
- (void)showFontSettingsPopover:(id)sender {
[self showPopoverWithViewController:self.appDelegate.fontSettingsNavigationController contentSize:CGSizeMake(240.0, 306.0) barButtonItem:sender];
}
- (void)showTrainingPopover:(id)sender {
if ([sender class] == [UIBarButtonItem class]) {
[self showPopoverWithViewController:self.appDelegate.trainerViewController contentSize:CGSizeMake(420, 382) barButtonItem:sender];
[self.appDelegate showPopoverWithViewController:self.appDelegate.trainerViewController contentSize:CGSizeMake(420, 382) barButtonItem:sender];
} else if ([sender class] == [FeedTableCell class]) {
FeedTableCell *cell = (FeedTableCell *)sender;
[self showPopoverWithViewController:self.appDelegate.trainerViewController contentSize:CGSizeMake(420, 382) sourceView:cell sourceRect:cell.bounds];
[self.appDelegate showPopoverWithViewController:self.appDelegate.trainerViewController contentSize:CGSizeMake(420, 382) sourceView:cell sourceRect:cell.bounds];
} else if ([sender class] == [FeedDetailTableCell class]) {
FeedDetailTableCell *cell = (FeedDetailTableCell *)sender;
[self showPopoverWithViewController:self.appDelegate.trainerViewController contentSize:CGSizeMake(420, 382) sourceView:cell sourceRect:cell.bounds];
[self.appDelegate showPopoverWithViewController:self.appDelegate.trainerViewController contentSize:CGSizeMake(420, 382) sourceView:cell sourceRect:cell.bounds];
} else {
CGRect frame = [sender CGRectValue];
[self showPopoverWithViewController:self.appDelegate.trainerViewController contentSize:CGSizeMake(420, 382) sourceView:self.storyPageControl.view sourceRect:frame];
[self.appDelegate showPopoverWithViewController:self.appDelegate.trainerViewController contentSize:CGSizeMake(420, 382) sourceView:self.storyPageControl.view sourceRect:frame];
}
}
- (void)showUserTagsPopover:(id)sender {
[appDelegate.userTagsViewController view]; // Force viewDidLoad
CGRect frame = [sender CGRectValue];
[self showPopoverWithViewController:self.appDelegate.userTagsViewController contentSize:CGSizeMake(220, 382) sourceView:self.storyPageControl.view sourceRect:frame];
}
- (BOOL)hidePopoverAnimated:(BOOL)animated {
UIViewController *presentedViewController = self.masterNavigationController.presentedViewController;
if (!presentedViewController)
return NO;
[presentedViewController dismissViewControllerAnimated:animated completion:nil];
return YES;
}
- (void)hidePopover {
[self hidePopoverAnimated:YES];
[appDelegate.modalNavigationController dismissViewControllerAnimated:YES completion:nil];
}
- (void)syncNextPreviousButtons {
[self.storyPageControl setNextPreviousButtons];
}
@ -581,7 +505,7 @@
[self transitionToFeedDetail:YES];
}
- (void)transitionToFeedDetail:(BOOL)resetLayout {
[self hidePopover];
[self.appDelegate hidePopover];
if (self.feedDetailIsVisible) resetLayout = NO;
self.feedDetailIsVisible = YES;
@ -856,7 +780,7 @@
return;
}
[self hidePopover];
[self.appDelegate hidePopover];
if (self.isSharingStory) {
[self transitionFromShareView];
@ -936,7 +860,7 @@
return;
}
[self hidePopover];
[self.appDelegate hidePopover];
CGRect vb = [self.view bounds];
self.isSharingStory = YES;
self.storyPageControl.traverseView.hidden = YES;
@ -970,7 +894,7 @@
return;
}
[self hidePopover];
[self.appDelegate hidePopover];
CGRect vb = [self.view bounds];
self.isSharingStory = NO;
self.storyPageControl.traverseView.hidden = NO;

View file

@ -11,7 +11,6 @@
#import "BaseViewController.h"
#import "FMDatabaseQueue.h"
#import "EventWindow.h"
#import "WYPopoverController.h"
#define FEED_DETAIL_VIEW_TAG 1000001
#define STORY_DETAIL_VIEW_TAG 1000002
@ -50,7 +49,7 @@
@class TMCache;
@interface NewsBlurAppDelegate : BaseViewController
<UIApplicationDelegate, UIAlertViewDelegate, UINavigationControllerDelegate, UIPopoverPresentationControllerDelegate, WYPopoverControllerDelegate,
<UIApplicationDelegate, UIAlertViewDelegate, UINavigationControllerDelegate, UIPopoverPresentationControllerDelegate,
SFSafariViewControllerDelegate> {
EventWindow *window;
UINavigationController *ftuxNavigationController;
@ -86,7 +85,6 @@ SFSafariViewControllerDelegate> {
UINavigationController *originalStoryViewNavController;
UserProfileViewController *userProfileViewController;
IASKAppSettingsViewController *preferencesViewController;
WYPopoverController *popoverController;
NSString * activeUsername;
NSString * activeUserProfileId;
@ -175,7 +173,6 @@ SFSafariViewControllerDelegate> {
@property (nonatomic) IBOutlet FontSettingsViewController *fontSettingsViewController;
@property (nonatomic) IBOutlet UserProfileViewController *userProfileViewController;
@property (nonatomic) IBOutlet IASKAppSettingsViewController *preferencesViewController;
@property (nonatomic, retain) WYPopoverController *popoverController;
@property (nonatomic, strong) UINavigationController *fontSettingsNavigationController;
@property (nonatomic, strong) MarkReadMenuViewController *markReadMenuViewController;
@property (nonatomic) IBOutlet FirstTimeUserViewController *firstTimeUserViewController;
@ -349,6 +346,11 @@ SFSafariViewControllerDelegate> {
- (void)showMarkReadMenuWithFeedIds:(NSArray *)feedIds collectionTitle:(NSString *)collectionTitle sourceView:(UIView *)sourceView sourceRect:(CGRect)sourceRect completionHandler:(void (^)(BOOL marked))completionHandler;
- (void)showMarkOlderNewerReadMenuWithStoriesCollection:(StoriesCollection *)olderNewerCollection story:(NSDictionary *)olderNewerStory sourceView:(UIView *)sourceView sourceRect:(CGRect)sourceRect completionHandler:(void (^)(BOOL marked))completionHandler;
- (void)showPopoverWithViewController:(UIViewController *)viewController contentSize:(CGSize)contentSize barButtonItem:(UIBarButtonItem *)barButtonItem;
- (void)showPopoverWithViewController:(UIViewController *)viewController contentSize:(CGSize)contentSize sourceView:(UIView *)sourceView sourceRect:(CGRect)sourceRect;
- (BOOL)hidePopoverAnimated:(BOOL)animated;
- (void)hidePopover;
+ (int)computeStoryScore:(NSDictionary *)intelligence;
- (NSString *)extractFolderName:(NSString *)folderName;
- (NSString *)extractParentFolderName:(NSString *)folderName;

View file

@ -103,7 +103,6 @@
@synthesize originalStoryViewNavController;
@synthesize userProfileViewController;
@synthesize preferencesViewController;
@synthesize popoverController;
@synthesize firstTimeUserViewController;
@synthesize firstTimeUserAddSitesViewController;
@ -445,7 +444,7 @@
- (void)hideUserProfileModal {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[self.masterContainerViewController hidePopover];
[self hidePopover];
} else {
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
}
@ -610,7 +609,7 @@
}];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
BOOL fromPopover = [self.masterContainerViewController hidePopoverAnimated:NO];
BOOL fromPopover = [self hidePopoverAnimated:NO];
[self.masterContainerViewController presentViewController:activityViewController animated:!fromPopover completion:nil];
activityViewController.modalPresentationStyle = UIModalPresentationPopover;
// iOS 8+
@ -808,27 +807,9 @@
self.userTagsViewController = [[UserTagsViewController alloc] init];
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[self.masterContainerViewController showUserTagsPopover:sender];
} else {
if (self.popoverController == nil) {
self.popoverController = [[WYPopoverController alloc]
initWithContentViewController:self.userTagsViewController];
self.popoverController.delegate = self;
} else {
[self.popoverController dismissPopoverAnimated:YES];
self.popoverController = nil;
}
[self.userTagsViewController view]; // Force viewDidLoad
[self.popoverController setPopoverContentSize:CGSizeMake(220, 38 * MIN(6.5, [[self.dictSavedStoryTags allKeys] count] + [self.activeStory[@"user_tags"] count] + 1))];
CGRect frame = [sender CGRectValue];
[self.popoverController presentPopoverFromRect:frame
inView:self.storyPageControl.currentPage.view
permittedArrowDirections:WYPopoverArrowDirectionAny
animated:YES];
}
[self.userTagsViewController view]; // Force viewDidLoad
CGRect frame = [sender CGRectValue];
[self showPopoverWithViewController:self.userTagsViewController contentSize:CGSizeMake(220, 382) sourceView:self.storyPageControl.view sourceRect:frame];
}
#pragma mark - UIPopoverPresentationControllerDelegate
@ -837,19 +818,6 @@
return UIModalPresentationNone;
}
#pragma mark -
#pragma mark WYPopoverControllerDelegate implementation
- (void)popoverControllerDidDismissPopover:(WYPopoverController *)thePopoverController {
//Safe to release the popover here
self.popoverController = nil;
}
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)thePopoverController {
//The popover is automatically dismissed if you click outside it, unless you return NO here
return YES;
}
#pragma mark -
- (void)reloadFeedsView:(BOOL)showLoader {
@ -926,9 +894,8 @@
[self loadFeedDetailView];
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
[self.navigationController popToRootViewControllerAnimated:NO];
if (self.feedsViewController.popoverController) {
[self.feedsViewController.popoverController dismissPopoverAnimated:YES];
}
[self hidePopoverAnimated:YES];
if (self.navigationController.presentedViewController) {
[self.navigationController dismissViewControllerAnimated:YES completion:^{
[self loadFeedDetailView];
@ -944,9 +911,7 @@
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
[self.navigationController popToRootViewControllerAnimated:NO];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
if (self.feedsViewController.popoverController) {
[self.feedsViewController.popoverController dismissPopoverAnimated:NO];
}
[self hidePopoverAnimated:NO];
}
self.inFindingStoryMode = YES;
@ -1232,9 +1197,7 @@
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
[self.navigationController popToRootViewControllerAnimated:NO];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
if (self.feedsViewController.popoverController) {
[self.feedsViewController.popoverController dismissPopoverAnimated:NO];
}
[self hidePopoverAnimated:NO];
}
self.inFindingStoryMode = YES;
@ -2098,6 +2061,61 @@
[self.navigationController presentViewController:self.markReadMenuViewController animated:YES completion:nil];
}
- (void)showPopoverWithViewController:(UIViewController *)viewController contentSize:(CGSize)contentSize barButtonItem:(UIBarButtonItem *)barButtonItem {
[self showPopoverWithViewController:viewController contentSize:contentSize barButtonItem:barButtonItem sourceView:nil sourceRect:CGRectZero];
}
- (void)showPopoverWithViewController:(UIViewController *)viewController contentSize:(CGSize)contentSize sourceView:(UIView *)sourceView sourceRect:(CGRect)sourceRect {
[self showPopoverWithViewController:viewController contentSize:contentSize barButtonItem:nil sourceView:sourceView sourceRect:sourceRect];
}
- (void)showPopoverWithViewController:(UIViewController *)viewController contentSize:(CGSize)contentSize barButtonItem:(UIBarButtonItem *)barButtonItem sourceView:(UIView *)sourceView sourceRect:(CGRect)sourceRect {
if (viewController == self.navigationControllerForPopover.presentedViewController) {
return; // nothing to do, already showing this controller
}
[self hidePopoverAnimated:YES];
viewController.modalPresentationStyle = UIModalPresentationPopover;
viewController.preferredContentSize = contentSize;
UIPopoverPresentationController *popoverPresentationController = viewController.popoverPresentationController;
popoverPresentationController.delegate = self;
popoverPresentationController.backgroundColor = UIColorFromRGB(NEWSBLUR_WHITE_COLOR);
popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionAny;
if (barButtonItem) {
popoverPresentationController.barButtonItem = barButtonItem;
} else {
popoverPresentationController.sourceView = sourceView;
popoverPresentationController.sourceRect = sourceRect;
}
[self.navigationControllerForPopover presentViewController:viewController animated:YES completion:nil];
}
- (BOOL)hidePopoverAnimated:(BOOL)animated {
UIViewController *presentedViewController = self.navigationControllerForPopover.presentedViewController;
if (!presentedViewController || presentedViewController.presentationController.presentationStyle != UIModalPresentationPopover)
return NO;
[presentedViewController dismissViewControllerAnimated:animated completion:nil];
return YES;
}
- (void)hidePopover {
[self hidePopoverAnimated:YES];
[self.modalNavigationController dismissViewControllerAnimated:YES completion:nil];
}
- (UINavigationController *)navigationControllerForPopover {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return self.masterContainerViewController.masterNavigationController;
} else {
return self.navigationController;
}
}
#pragma mark -
#pragma mark Story functions

View file

@ -12,7 +12,6 @@
#import "ASIHTTPRequest.h"
#import "PullToRefreshView.h"
#import "BaseViewController.h"
#import "WYPopoverController.h"
#import "NBNotifier.h"
#import "IASKAppSettingsViewController.h"
#import "MCSwipeTableViewCell.h"
@ -23,7 +22,6 @@
<UITableViewDelegate, UITableViewDataSource,
UIAlertViewDelegate, PullToRefreshViewDelegate,
ASIHTTPRequestDelegate, NSCacheDelegate,
WYPopoverControllerDelegate,
UIPopoverControllerDelegate,
IASKSettingsDelegate,
MCSwipeTableViewCellDelegate,
@ -50,8 +48,6 @@ UIGestureRecognizerDelegate> {
UIBarButtonItem * settingsBarButton;
UIBarButtonItem * activitiesButton;
UISegmentedControl * intelligenceControl;
WYPopoverController *popoverController;
Class popoverClass;
NBNotifier *notifier;
}
@ -80,7 +76,6 @@ UIGestureRecognizerDelegate> {
@property (nonatomic) NSDate *lastUpdate;
@property (nonatomic) NSCache *imageCache;
@property (nonatomic) IBOutlet UISegmentedControl * intelligenceControl;
@property (nonatomic, retain) WYPopoverController *popoverController;
@property (nonatomic) NSIndexPath *currentRowAtIndexPath;
@property (nonatomic) NSInteger currentSection;
@property (strong, nonatomic) IBOutlet UIView *noFocusMessage;

View file

@ -70,7 +70,6 @@ static UIFont *userLabelFont;
@synthesize pull;
@synthesize lastUpdate;
@synthesize imageCache;
@synthesize popoverController;
@synthesize currentRowAtIndexPath;
@synthesize currentSection;
@synthesize noFocusMessage;
@ -103,8 +102,6 @@ static UIFont *userLabelFont;
- (void)viewDidLoad {
[super viewDidLoad];
popoverClass = [WYPopoverController class];
pull = [[PullToRefreshView alloc] initWithScrollView:self.feedTitlesTable];
self.pull.tintColor = UIColorFromLightDarkRGB(0x0, 0xffffff);
self.pull.backgroundColor = UIColorFromRGB(0xE3E6E0);
@ -329,8 +326,7 @@ static UIFont *userLabelFont;
}
- (void)viewWillDisappear:(BOOL)animated {
[self.popoverController dismissPopoverAnimated:YES];
self.popoverController = nil;
[self.appDelegate hidePopoverAnimated:YES];
[super viewWillDisappear:animated];
}
@ -834,67 +830,22 @@ static UIFont *userLabelFont;
}
- (IBAction)tapAddSite:(id)sender {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[appDelegate.masterContainerViewController showSitePopover:self.addBarButton];
} else {
if (self.popoverController == nil) {
self.popoverController = [[WYPopoverController alloc]
initWithContentViewController:appDelegate.addSiteViewController];
self.popoverController.delegate = self;
} else {
[self.popoverController dismissPopoverAnimated:YES];
self.popoverController = nil;
}
[self.popoverController setPopoverContentSize:CGSizeMake(self.view.frame.size.width - 36,
MIN(self.view.frame.size.height - 28, 355))];
[self.popoverController presentPopoverFromBarButtonItem:self.addBarButton
permittedArrowDirections:UIPopoverArrowDirectionDown
animated:YES];
}
[appDelegate.addSiteViewController reload];
[self.appDelegate showPopoverWithViewController:self.appDelegate.addSiteViewController contentSize:CGSizeMake(320, 355) barButtonItem:self.addBarButton];
[self.appDelegate.addSiteViewController reload];
}
- (IBAction)showSettingsPopover:(id)sender {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[appDelegate.masterContainerViewController showFeedMenuPopover:self.settingsBarButton];
} else {
if (self.popoverController == nil) {
self.popoverController = [[WYPopoverController alloc]
initWithContentViewController:appDelegate.feedsMenuViewController];
[self.appDelegate.feedsMenuViewController view];
NSInteger menuCount = [self.appDelegate.feedsMenuViewController.menuOptions count];
self.popoverController.delegate = self;
} else {
[self.popoverController dismissPopoverAnimated:YES];
self.popoverController = nil;
}
[appDelegate.feedsMenuViewController view]; // Force viewDidLoad
[self.popoverController setPopoverContentSize:CGSizeMake(200, 38 * [appDelegate.feedsMenuViewController.menuOptions count])];
[self.popoverController presentPopoverFromBarButtonItem:self.settingsBarButton
permittedArrowDirections:UIPopoverArrowDirectionDown
animated:YES];
}
[self.appDelegate showPopoverWithViewController:self.appDelegate.feedsMenuViewController contentSize:CGSizeMake(200, 38 * menuCount) barButtonItem:self.settingsBarButton];
}
- (IBAction)showInteractionsPopover:(id)sender {
if (self.popoverController == nil) {
self.popoverController = [[WYPopoverController alloc]
initWithContentViewController:appDelegate.dashboardViewController];
CGSize size = CGSizeMake(self.view.frame.size.width - 36,
self.view.frame.size.height - 60);
self.popoverController.delegate = self;
} else {
[self.popoverController dismissPopoverAnimated:YES];
self.popoverController = nil;
}
[self.popoverController setPopoverContentSize:CGSizeMake(self.view.frame.size.width - 36,
self.view.frame.size.height - 60)];
[self.popoverController presentPopoverFromBarButtonItem:self.activitiesButton
permittedArrowDirections:UIPopoverArrowDirectionUp
animated:YES];
[self.appDelegate showPopoverWithViewController:self.appDelegate.dashboardViewController contentSize:size barButtonItem:self.activitiesButton];
[appDelegate.dashboardViewController refreshInteractions];
[appDelegate.dashboardViewController refreshActivity];
@ -1002,8 +953,7 @@ static UIFont *userLabelFont;
[self.presentedViewController dismissViewControllerAnimated:YES completion:nil];
}
[self.popoverController dismissPopoverAnimated:YES];
self.popoverController = nil;
[self.appDelegate hidePopoverAnimated:YES];
self.navigationController.navigationBar.tintColor = UIColorFromRGB(0x8F918B);
self.navigationController.navigationBar.barTintColor = UIColorFromRGB(0xE3E6E0);
@ -1955,19 +1905,6 @@ heightForHeaderInSection:(NSInteger)section {
return self.lastUpdate;
}
#pragma mark -
#pragma mark WYPopoverControllerDelegate implementation
- (void)popoverControllerDidDismissPopover:(WYPopoverController *)thePopoverController {
//Safe to release the popover here
self.popoverController = nil;
}
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)thePopoverController {
//The popover is automatically dismissed if you click outside it, unless you return NO here
return YES;
}
- (void)resetToolbar {
self.navigationItem.leftBarButtonItem = nil;
self.navigationItem.titleView = nil;

View file

@ -1506,7 +1506,7 @@ shouldStartLoadWithRequest:(NSURLRequest *)request
- (void)showOriginalStory:(UIGestureRecognizer *)gesture {
NSURL *url = [NSURL URLWithString:[appDelegate.activeStory
objectForKey:@"story_permalink"]];
[appDelegate.masterContainerViewController hidePopover];
[appDelegate hidePopover];
if (!gesture || [gesture isKindOfClass:[UITapGestureRecognizer class]]) {
[appDelegate showOriginalStory:url];

View file

@ -9,7 +9,6 @@
#import <UIKit/UIKit.h>
#import "BaseViewController.h"
#import "NewsBlurAppDelegate.h"
#import "WYPopoverController.h"
#import "THCircularProgressView.h"
#import "NBNotifier.h"
@ -17,7 +16,7 @@
@class ASIHTTPRequest;
@interface StoryPageControl : BaseViewController
<UIScrollViewDelegate, UIPopoverControllerDelegate, UIPopoverPresentationControllerDelegate, UIGestureRecognizerDelegate, WYPopoverControllerDelegate> {
<UIScrollViewDelegate, UIPopoverControllerDelegate, UIPopoverPresentationControllerDelegate, UIGestureRecognizerDelegate> {
NewsBlurAppDelegate *appDelegate;
@ -31,9 +30,6 @@
UIView *progressView;
UIView *progressViewContainer;
WYPopoverController *popoverController;
Class popoverClass;
BOOL isDraggingScrollview;
BOOL isAnimatedIntoPlace;
BOOL inRotation;
@ -82,8 +78,6 @@
@property (nonatomic, strong) NBNotifier *notifier;
@property (nonatomic) NSInteger scrollingToPage;
@property (nonatomic, strong) WYPopoverController *popoverController;
- (void)resizeScrollView;
- (void)applyNewIndex:(NSInteger)newIndex pageController:(StoryDetailViewController *)pageController;
- (void)layoutForInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;

View file

@ -45,7 +45,6 @@
@synthesize buttonBack;
@synthesize bottomSize;
@synthesize bottomSizeHeightConstraint;
@synthesize popoverController;
@synthesize loadingIndicator;
@synthesize inTouchMove;
@synthesize isDraggingScrollview;
@ -102,8 +101,6 @@
[self.scrollView sizeToFit];
// NSLog(@"Scroll view frame post 2: %@", NSStringFromCGRect(self.scrollView.frame));
popoverClass = [WYPopoverController class];
// adding HUD for progress bar
CGFloat radius = 8;
circularProgressView = [[THCircularProgressView alloc]
@ -1078,7 +1075,7 @@
}
- (IBAction)showOriginalSubview:(id)sender {
[appDelegate.masterContainerViewController hidePopover];
[appDelegate hidePopover];
NSURL *url = [NSURL URLWithString:[appDelegate.activeStory
objectForKey:@"story_permalink"]];
@ -1156,26 +1153,6 @@
// popPC.sourceRect = [sender frame];
[self presentViewController:self.appDelegate.fontSettingsNavigationController animated:YES completion:nil];
return;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[appDelegate.masterContainerViewController showFontSettingsPopover:self.fontSettingsButton];
} else {
if (self.popoverController == nil) {
self.popoverController = [[WYPopoverController alloc]
initWithContentViewController:appDelegate.fontSettingsNavigationController];
self.popoverController.delegate = self;
} else {
[self.popoverController dismissPopoverAnimated:YES];
self.popoverController = nil;
}
[self.popoverController setPopoverContentSize:CGSizeMake(240.0, 302.0)];
[self.popoverController presentPopoverFromBarButtonItem:self.fontSettingsButton
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
}
- (void)setFontStyle:(NSString *)fontStyle {
@ -1292,19 +1269,6 @@
}
}
#pragma mark -
#pragma mark WYPopoverControllerDelegate implementation
- (void)popoverControllerDidDismissPopover:(WYPopoverController *)thePopoverController {
//Safe to release the popover here
self.popoverController = nil;
}
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)thePopoverController {
//The popover is automatically dismissed if you click outside it, unless you return NO here
return YES;
}
#pragma mark - UIPopoverPresentationControllerDelegate
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {

View file

@ -100,7 +100,7 @@
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC),
dispatch_get_main_queue(), ^() {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[appDelegate.masterContainerViewController hidePopover];
[appDelegate hidePopover];
} else {
[appDelegate.navigationController dismissViewControllerAnimated:YES completion:nil];
}
@ -540,7 +540,7 @@
#pragma mark Actions
- (IBAction)doCloseDialog:(id)sender {
[appDelegate.masterContainerViewController hidePopover];
[appDelegate hidePopover];
[appDelegate.trainerViewController dismissViewControllerAnimated:YES completion:nil];
}

View file

@ -307,8 +307,6 @@
FF6281FA1A09614C00271FDB /* all@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = FF6281F91A09614C00271FDB /* all@3x.png */; };
FF6281FC1A0962FA00271FDB /* unread_green@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = FF6281FB1A0962FA00271FDB /* unread_green@3x.png */; };
FF6281FE1A09641100271FDB /* unread_yellow@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = FF6281FD1A09641100271FDB /* unread_yellow@3x.png */; };
FF62820A1A098EA800271FDB /* WYPopoverController.m in Sources */ = {isa = PBXBuildFile; fileRef = FF6282071A098EA800271FDB /* WYPopoverController.m */; };
FF62820B1A098EA800271FDB /* WYStoryboardPopoverSegue.m in Sources */ = {isa = PBXBuildFile; fileRef = FF6282091A098EA800271FDB /* WYStoryboardPopoverSegue.m */; };
FF62820E1A1160DD00271FDB /* add_tag.png in Resources */ = {isa = PBXBuildFile; fileRef = FF62820C1A1160DD00271FDB /* add_tag.png */; };
FF62820F1A1160DD00271FDB /* add_tag@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FF62820D1A1160DD00271FDB /* add_tag@2x.png */; };
FF6282151A11613900271FDB /* UserTagsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FF6282141A11613900271FDB /* UserTagsViewController.m */; };
@ -923,10 +921,6 @@
FF6281F91A09614C00271FDB /* all@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "all@3x.png"; sourceTree = "<group>"; };
FF6281FB1A0962FA00271FDB /* unread_green@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "unread_green@3x.png"; sourceTree = "<group>"; };
FF6281FD1A09641100271FDB /* unread_yellow@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "unread_yellow@3x.png"; sourceTree = "<group>"; };
FF6282061A098EA800271FDB /* WYPopoverController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WYPopoverController.h; sourceTree = "<group>"; };
FF6282071A098EA800271FDB /* WYPopoverController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WYPopoverController.m; sourceTree = "<group>"; };
FF6282081A098EA800271FDB /* WYStoryboardPopoverSegue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WYStoryboardPopoverSegue.h; sourceTree = "<group>"; };
FF6282091A098EA800271FDB /* WYStoryboardPopoverSegue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WYStoryboardPopoverSegue.m; sourceTree = "<group>"; };
FF62820C1A1160DD00271FDB /* add_tag.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = add_tag.png; sourceTree = "<group>"; };
FF62820D1A1160DD00271FDB /* add_tag@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "add_tag@2x.png"; sourceTree = "<group>"; };
FF6282131A11613900271FDB /* UserTagsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserTagsViewController.h; sourceTree = "<group>"; };
@ -1301,7 +1295,6 @@
FF2EB77E1AA65504002549A7 /* InAppSettingsKit */,
FF753CC2175858FC00344EC9 /* fmdb */,
FF22FE5316E53ADC0046165A /* Underscore */,
FF6282051A098EA800271FDB /* WYPopoverController */,
FF1F13CC18A9C2BE00FDA816 /* TMCache */,
43A4C3E615B0099B008787B5 /* NewsBlur_Prefix.pch */,
43A4C3B915B00966008787B5 /* ABTableViewCell.h */,
@ -2065,18 +2058,6 @@
name = Activities;
sourceTree = "<group>";
};
FF6282051A098EA800271FDB /* WYPopoverController */ = {
isa = PBXGroup;
children = (
FF6282061A098EA800271FDB /* WYPopoverController.h */,
FF6282071A098EA800271FDB /* WYPopoverController.m */,
FF6282081A098EA800271FDB /* WYStoryboardPopoverSegue.h */,
FF6282091A098EA800271FDB /* WYStoryboardPopoverSegue.m */,
);
name = WYPopoverController;
path = "Other Sources/WYPopoverController";
sourceTree = "<group>";
};
FF753CC2175858FC00344EC9 /* fmdb */ = {
isa = PBXGroup;
children = (
@ -2668,7 +2649,6 @@
7843F50511EEB1A000675F64 /* FeedDetailTableCell.m in Sources */,
784B50ED127E3F68008F90EA /* LoginViewController.m in Sources */,
78095E34128EF30C00230C8E /* ASIAuthenticationDialog.m in Sources */,
FF62820B1A098EA800271FDB /* WYStoryboardPopoverSegue.m in Sources */,
78095E35128EF30D00230C8E /* ASIDownloadCache.m in Sources */,
FF2EB7B41AA65504002549A7 /* IASKSettingsReader.m in Sources */,
78095E36128EF30D00230C8E /* ASIFormDataRequest.m in Sources */,
@ -2688,7 +2668,6 @@
FF5EA47F143B691000B7563D /* AddSiteViewController.m in Sources */,
FF1F13D818AAC97900FDA816 /* UIImage+Resize.m in Sources */,
FFD887F01445F1E800385399 /* AddSiteAutocompleteCell.m in Sources */,
FF62820A1A098EA800271FDB /* WYPopoverController.m in Sources */,
FF8D1ECD1BAA311000725D8A /* SBJson4StreamParser.m in Sources */,
FFE5322F144C8AC300ACFDE0 /* Utilities.m in Sources */,
FFD1D7311459B63500E46F89 /* BaseViewController.m in Sources */,

View file

@ -1,278 +0,0 @@
/*
Version 0.3.6
WYPopoverController is available under the MIT license.
Copyright © 2013 Nicolas CHENG
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
@protocol WYPopoverControllerDelegate;
@class WYPopoverTheme;
#ifndef WY_POPOVER_DEFAULT_ANIMATION_DURATION
#define WY_POPOVER_DEFAULT_ANIMATION_DURATION .25f
#endif
#ifndef WY_POPOVER_MIN_SIZE
#define WY_POPOVER_MIN_SIZE CGSizeMake(240, 160)
#endif
typedef NS_OPTIONS(NSUInteger, WYPopoverArrowDirection) {
WYPopoverArrowDirectionUp = 1UL << 0,
WYPopoverArrowDirectionDown = 1UL << 1,
WYPopoverArrowDirectionLeft = 1UL << 2,
WYPopoverArrowDirectionRight = 1UL << 3,
WYPopoverArrowDirectionNone = 1UL << 4,
WYPopoverArrowDirectionAny = WYPopoverArrowDirectionUp | WYPopoverArrowDirectionDown | WYPopoverArrowDirectionLeft | WYPopoverArrowDirectionRight,
WYPopoverArrowDirectionUnknown = NSUIntegerMax
};
typedef NS_OPTIONS(NSUInteger, WYPopoverAnimationOptions) {
WYPopoverAnimationOptionFade = 1UL << 0, // default
WYPopoverAnimationOptionScale = 1UL << 1,
WYPopoverAnimationOptionFadeWithScale = WYPopoverAnimationOptionFade | WYPopoverAnimationOptionScale
};
////////////////////////////////////////////////////////////////////////////////////////////////////////
@interface WYPopoverBackgroundView : UIView
// UI_APPEARANCE_SELECTOR doesn't support BOOLs on iOS 7,
// so these two need to be NSUInteger instead
@property (nonatomic, assign) NSUInteger usesRoundedArrow UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) NSUInteger dimsBackgroundViewsTintColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor *tintColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor *fillTopColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor *fillBottomColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor *glossShadowColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) CGSize glossShadowOffset UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) NSUInteger glossShadowBlurRadius UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) NSUInteger borderWidth UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) NSUInteger arrowBase UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) NSUInteger arrowHeight UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor *outerShadowColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor *outerStrokeColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) NSUInteger outerShadowBlurRadius UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) CGSize outerShadowOffset UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) NSUInteger outerCornerRadius UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) NSUInteger minOuterCornerRadius UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor *innerShadowColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor *innerStrokeColor UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) NSUInteger innerShadowBlurRadius UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) CGSize innerShadowOffset UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) NSUInteger innerCornerRadius UI_APPEARANCE_SELECTOR;
@property (nonatomic, assign) UIEdgeInsets viewContentInsets UI_APPEARANCE_SELECTOR;
@property (nonatomic, strong) UIColor *overlayColor UI_APPEARANCE_SELECTOR;
@property(nonatomic) CGFloat preferredAlpha UI_APPEARANCE_SELECTOR;
@end
////////////////////////////////////////////////////////////////////////////////////////////////////////
@interface WYPopoverController : NSObject <UIAppearanceContainer>
@property (nonatomic, weak) id <WYPopoverControllerDelegate> delegate;
@property (nonatomic, assign) BOOL dismissOnTap;
@property (nonatomic, copy) NSArray *passthroughViews;
@property (nonatomic, assign) BOOL dismissOnPassthroughViewTap;
@property (nonatomic, assign) BOOL wantsDefaultContentAppearance;
@property (nonatomic, assign) UIEdgeInsets popoverLayoutMargins;
@property (nonatomic, readonly, getter=isPopoverVisible) BOOL popoverVisible;
@property (nonatomic, strong, readonly) UIViewController *contentViewController;
@property (nonatomic, assign) CGSize popoverContentSize;
@property (nonatomic, assign) float animationDuration;
@property (nonatomic, assign) BOOL implicitAnimationsDisabled;
@property (nonatomic, strong) WYPopoverTheme *theme;
@property (nonatomic, copy) void (^dismissCompletionBlock)(WYPopoverController *dimissedController);
+ (void)setDefaultTheme:(WYPopoverTheme *)theme;
+ (WYPopoverTheme *)defaultTheme;
// initialization
- (id)initWithContentViewController:(UIViewController *)viewController;
// theme
- (void)beginThemeUpdates;
- (void)endThemeUpdates;
// Present popover from classic views methods
- (void)presentPopoverFromRect:(CGRect)rect
inView:(UIView *)view
permittedArrowDirections:(WYPopoverArrowDirection)arrowDirections
animated:(BOOL)animated;
- (void)presentPopoverFromRect:(CGRect)rect
inView:(UIView *)view
permittedArrowDirections:(WYPopoverArrowDirection)arrowDirections
animated:(BOOL)animated
completion:(void (^)(void))completion;
- (void)presentPopoverFromRect:(CGRect)rect
inView:(UIView *)view
permittedArrowDirections:(WYPopoverArrowDirection)arrowDirections
animated:(BOOL)animated
options:(WYPopoverAnimationOptions)options;
- (void)presentPopoverFromRect:(CGRect)rect
inView:(UIView *)view
permittedArrowDirections:(WYPopoverArrowDirection)arrowDirections
animated:(BOOL)animated
options:(WYPopoverAnimationOptions)options
completion:(void (^)(void))completion;
// Present popover from bar button items methods
- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item
permittedArrowDirections:(WYPopoverArrowDirection)arrowDirections
animated:(BOOL)animated;
- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item
permittedArrowDirections:(WYPopoverArrowDirection)arrowDirections
animated:(BOOL)animated
completion:(void (^)(void))completion;
- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item
permittedArrowDirections:(WYPopoverArrowDirection)arrowDirections
animated:(BOOL)animated
options:(WYPopoverAnimationOptions)options;
- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item
permittedArrowDirections:(WYPopoverArrowDirection)arrowDirections
animated:(BOOL)animated
options:(WYPopoverAnimationOptions)options
completion:(void (^)(void))completion;
// Present popover as dialog methods
- (void)presentPopoverAsDialogAnimated:(BOOL)animated;
- (void)presentPopoverAsDialogAnimated:(BOOL)animated
completion:(void (^)(void))completion;
- (void)presentPopoverAsDialogAnimated:(BOOL)animated
options:(WYPopoverAnimationOptions)options;
- (void)presentPopoverAsDialogAnimated:(BOOL)animated
options:(WYPopoverAnimationOptions)options
completion:(void (^)(void))completion;
// Dismiss popover methods
- (void)dismissPopoverAnimated:(BOOL)animated;
- (void)dismissPopoverAnimated:(BOOL)animated
completion:(void (^)(void))completion;
- (void)dismissPopoverAnimated:(BOOL)animated
options:(WYPopoverAnimationOptions)aOptions;
- (void)dismissPopoverAnimated:(BOOL)animated
options:(WYPopoverAnimationOptions)aOptions
completion:(void (^)(void))completion;
// Misc
- (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated;
- (void)performWithoutAnimation:(void (^)(void))aBlock;
@end
////////////////////////////////////////////////////////////////////////////////////////////////////////
@protocol WYPopoverControllerDelegate <NSObject>
@optional
- (BOOL)popoverControllerShouldDismissPopover:(WYPopoverController *)popoverController;
- (void)popoverControllerDidPresentPopover:(WYPopoverController *)popoverController;
- (void)popoverControllerDidDismissPopover:(WYPopoverController *)popoverController;
- (void)popoverController:(WYPopoverController *)popoverController willRepositionPopoverToRect:(inout CGRect *)rect inView:(inout UIView **)view;
- (BOOL)popoverControllerShouldIgnoreKeyboardBounds:(WYPopoverController *)popoverController;
- (void)popoverController:(WYPopoverController *)popoverController willTranslatePopoverWithYOffset:(float *)value;
@end
////////////////////////////////////////////////////////////////////////////////////////////////////////
@interface WYPopoverTheme : NSObject
// These two can be BOOLs, because implicit casting
// between BOOLs and NSUIntegers works fine
@property (nonatomic, assign) BOOL usesRoundedArrow;
@property (nonatomic, assign) BOOL dimsBackgroundViewsTintColor;
@property (nonatomic, strong) UIColor *tintColor;
@property (nonatomic, strong) UIColor *fillTopColor;
@property (nonatomic, strong) UIColor *fillBottomColor;
@property (nonatomic, strong) UIColor *glossShadowColor;
@property (nonatomic, assign) CGSize glossShadowOffset;
@property (nonatomic, assign) NSUInteger glossShadowBlurRadius;
@property (nonatomic, assign) NSUInteger borderWidth;
@property (nonatomic, assign) NSUInteger arrowBase;
@property (nonatomic, assign) NSUInteger arrowHeight;
@property (nonatomic, strong) UIColor *outerShadowColor;
@property (nonatomic, strong) UIColor *outerStrokeColor;
@property (nonatomic, assign) NSUInteger outerShadowBlurRadius;
@property (nonatomic, assign) CGSize outerShadowOffset;
@property (nonatomic, assign) NSUInteger outerCornerRadius;
@property (nonatomic, assign) NSUInteger minOuterCornerRadius;
@property (nonatomic, strong) UIColor *innerShadowColor;
@property (nonatomic, strong) UIColor *innerStrokeColor;
@property (nonatomic, assign) NSUInteger innerShadowBlurRadius;
@property (nonatomic, assign) CGSize innerShadowOffset;
@property (nonatomic, assign) NSUInteger innerCornerRadius;
@property (nonatomic, assign) UIEdgeInsets viewContentInsets;
@property (nonatomic, strong) UIColor *overlayColor;
@property (nonatomic) CGFloat preferredAlpha;
+ (instancetype)theme;
+ (instancetype)themeForIOS6;
+ (instancetype)themeForIOS7;
@end

View file

@ -1,40 +0,0 @@
/*
Version 0.3.6
WYPopoverController is available under the MIT license.
Copyright © 2013 Nicolas CHENG
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import <UIKit/UIKit.h>
#import "WYPopoverController.h"
@interface WYStoryboardPopoverSegue : UIStoryboardSegue
- (WYPopoverController*)popoverControllerWithSender:(id)sender
permittedArrowDirections:(WYPopoverArrowDirection)arrowDirections
animated:(BOOL)animated;
- (WYPopoverController*)popoverControllerWithSender:(id)sender
permittedArrowDirections:(WYPopoverArrowDirection)arrowDirections
animated:(BOOL)animated
options:(WYPopoverAnimationOptions)options;
@end

View file

@ -1,97 +0,0 @@
/*
Version 0.3.6
WYPopoverController is available under the MIT license.
Copyright © 2013 Nicolas CHENG
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#import "WYStoryboardPopoverSegue.h"
////////////////////////////////////////////////////////////////////////////
@interface WYStoryboardPopoverSegue()
{
WYPopoverController *_popoverController;
id _sender;
WYPopoverArrowDirection _arrowDirections;
WYPopoverAnimationOptions _options;
BOOL _animated;
}
@end
////////////////////////////////////////////////////////////////////////////
@implementation WYStoryboardPopoverSegue
- (void)perform
{
if ([_sender isKindOfClass:[UIBarButtonItem class]])
{
[_popoverController presentPopoverFromBarButtonItem:(UIBarButtonItem*)_sender
permittedArrowDirections:_arrowDirections
animated:_animated
options:_options];
}
else
{
UIView *view = (UIView *)_sender;
[_popoverController presentPopoverFromRect:view.bounds
inView:view
permittedArrowDirections:_arrowDirections
animated:_animated
options:_options];
}
}
- (WYPopoverController *)popoverControllerWithSender:(id)aSender
permittedArrowDirections:(WYPopoverArrowDirection)aArrowDirections
animated:(BOOL)aAnimated
{
return [self popoverControllerWithSender:aSender
permittedArrowDirections:aArrowDirections
animated:aAnimated
options:WYPopoverAnimationOptionFade];
}
- (WYPopoverController *)popoverControllerWithSender:(id)aSender
permittedArrowDirections:(WYPopoverArrowDirection)aArrowDirections
animated:(BOOL)aAnimated
options:(WYPopoverAnimationOptions)aOptions
{
_sender = aSender;
_arrowDirections = aArrowDirections;
_animated = aAnimated;
_options = aOptions;
_popoverController = [[WYPopoverController alloc] initWithContentViewController:self.destinationViewController];
return _popoverController;
}
- (void)dealloc
{
_sender = nil;
_popoverController = nil;
}
@end