diff --git a/Blog.xcodeproj/project.pbxproj b/Blog.xcodeproj/project.pbxproj index 8503a82..ca238cf 100644 --- a/Blog.xcodeproj/project.pbxproj +++ b/Blog.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 1BCFCB7B50DAE4885AE55B80 /* MuseoSans-100.otf in Resources */ = {isa = PBXBuildFile; fileRef = 1BCFCC3154DB1D3B3C025211 /* MuseoSans-100.otf */; }; 1BCFCC3709A3C3783E180815 /* ChangeTitleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BCFCE26B630D546311BB715 /* ChangeTitleViewController.m */; }; 1BCFCC637C63C780248D685E /* PostCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BCFCB5C36F301B2B93F8069 /* PostCell.m */; }; + 1BCFCD56F7850C9BDF8261AC /* BlogSplitViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BCFC1C7E02F4D1867A5D711 /* BlogSplitViewController.m */; }; 1BCFCD747F327FC361469D49 /* MuseoSans-100-Italic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 1BCFCB67571197A762B88624 /* MuseoSans-100-Italic.otf */; }; 1BCFCD7E8EEBFAA97226B0BF /* UIColor+Hex.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BCFC23988387A5CAE551C90 /* UIColor+Hex.m */; }; 1BCFCE976D6638781FBA9942 /* MuseoSans-700.otf in Resources */ = {isa = PBXBuildFile; fileRef = 1BCFC462F5540C67B9D97299 /* MuseoSans-700.otf */; }; @@ -98,6 +99,7 @@ /* Begin PBXFileReference section */ 1613DC56A86AFA7E50460A37 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; 1BCFC0549FB7723D8893A91C /* ExtensionItemProcessor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExtensionItemProcessor.m; sourceTree = ""; }; + 1BCFC1C7E02F4D1867A5D711 /* BlogSplitViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BlogSplitViewController.m; sourceTree = ""; }; 1BCFC23988387A5CAE551C90 /* UIColor+Hex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+Hex.m"; sourceTree = ""; }; 1BCFC27DA8A32D0484C273A0 /* ExtensionItemProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExtensionItemProcessor.h; sourceTree = ""; }; 1BCFC32EC1E5AE196D194D21 /* CommonUI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommonUI.m; sourceTree = ""; }; @@ -105,6 +107,7 @@ 1BCFC3B62AA92DB07923F7C1 /* PostCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PostCollection.m; sourceTree = ""; }; 1BCFC40D1BFCFBF04BC79A35 /* MuseoSans-900.otf */ = {isa = PBXFileReference; lastKnownFileType = file.otf; path = "MuseoSans-900.otf"; sourceTree = ""; }; 1BCFC462F5540C67B9D97299 /* MuseoSans-700.otf */ = {isa = PBXFileReference; lastKnownFileType = file.otf; path = "MuseoSans-700.otf"; sourceTree = ""; }; + 1BCFC63F2FE2EFBC1C513859 /* BlogSplitViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlogSplitViewController.h; sourceTree = ""; }; 1BCFC7FD826AC4789F946BC9 /* MuseoSans-900-Italic.otf */ = {isa = PBXFileReference; lastKnownFileType = file.otf; path = "MuseoSans-900-Italic.otf"; sourceTree = ""; }; 1BCFCA73B716677EFBCEC417 /* CommonUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommonUI.h; sourceTree = ""; }; 1BCFCB18C8C8304D67E6462E /* PostCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PostCollection.h; sourceTree = ""; }; @@ -316,6 +319,8 @@ 7B2B43501AED5BA500BAC4E2 /* Functions.m */, 1BCFC32EC1E5AE196D194D21 /* CommonUI.m */, 1BCFCA73B716677EFBCEC417 /* CommonUI.h */, + 1BCFC1C7E02F4D1867A5D711 /* BlogSplitViewController.m */, + 1BCFC63F2FE2EFBC1C513859 /* BlogSplitViewController.h */, ); path = Blog; sourceTree = ""; @@ -685,6 +690,7 @@ 1BCFCF6DB93786CC2EDB8F69 /* PostCollection.m in Sources */, 1BCFCC3709A3C3783E180815 /* ChangeTitleViewController.m in Sources */, 1BCFC7C3FCBF364F3239C3D4 /* CommonUI.m in Sources */, + 1BCFCD56F7850C9BDF8261AC /* BlogSplitViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Blog/AppDelegate.m b/Blog/AppDelegate.m index 00f6f45..e31d802 100644 --- a/Blog/AppDelegate.m +++ b/Blog/AppDelegate.m @@ -12,6 +12,7 @@ #import "EditorViewController.h" #import "SamhuriNet.h" #import "Functions.h" +#import "BlogSplitViewController.h" @interface AppDelegate () @@ -28,13 +29,11 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self setupCodeInjection]; - UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; - UINavigationController *navigationController = splitViewController.viewControllers.lastObject; - navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem; + BlogSplitViewController *splitViewController = (BlogSplitViewController *)self.window.rootViewController; splitViewController.delegate = self; - self.postsViewController.blogController = self.site.blogController; - self.editorViewControllerForPhone.blogController = self.site.blogController; - self.editorViewControllerForPad.blogController = self.site.blogController; + splitViewController.site = [SamhuriNet new]; + UINavigationController *navigationController = splitViewController.detailNavigationController; + navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem; return YES; } @@ -50,37 +49,6 @@ } } -- (PostsViewController *)postsViewController { - UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; - UINavigationController *navigationController = splitViewController.viewControllers.firstObject; - PostsViewController *postsViewController = (PostsViewController *)navigationController.viewControllers.firstObject; - return postsViewController; -} - -- (EditorViewController *)editorViewControllerForPhone { - UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; - UINavigationController *navigationController = splitViewController.viewControllers.firstObject; - if (navigationController.viewControllers.count > 1) { - navigationController = navigationController.viewControllers.lastObject; - } - EditorViewController *editorViewController = (EditorViewController *)navigationController.viewControllers.firstObject; - return editorViewController; -} - -- (EditorViewController *)editorViewControllerForPad { - UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; - UINavigationController *navigationController = splitViewController.viewControllers.lastObject; - EditorViewController *editorViewController = (EditorViewController *)navigationController.viewControllers.firstObject; - return editorViewController; -} - -- (SamhuriNet *)site { - if (!_site) { - _site = [SamhuriNet new]; - } - return _site; -} - - (void)applicationWillResignActive:(UIApplication *)application { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. @@ -123,10 +91,9 @@ NSLog(@"did decode restorable state with coder %@", coder); } - #pragma mark - UISplitViewDelegate methods -- (BOOL) splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController { +- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController { UINavigationController *navigationController = [secondaryViewController isKindOfClass:[UINavigationController class]] ? (UINavigationController *)secondaryViewController : nil; diff --git a/Blog/Base.lproj/Main.storyboard b/Blog/Base.lproj/Main.storyboard index de640d0..ed85465 100644 --- a/Blog/Base.lproj/Main.storyboard +++ b/Blog/Base.lproj/Main.storyboard @@ -353,10 +353,10 @@ wanted with as little input and thought as possible. - + - + @@ -510,6 +510,6 @@ wanted with as little input and thought as possible. - + diff --git a/Blog/BlogSplitViewController.h b/Blog/BlogSplitViewController.h new file mode 100644 index 0000000..ef546c4 --- /dev/null +++ b/Blog/BlogSplitViewController.h @@ -0,0 +1,21 @@ +// +// Created by Sami Samhuri on 2015-06-27. +// Copyright (c) 2015 Guru Logic Inc. All rights reserved. +// +@import UIKit; + +@class PostsViewController; +@class EditorViewController; +@class SamhuriNet; + +@interface BlogSplitViewController : UISplitViewController + +@property (nonatomic, strong) SamhuriNet *site; + +- (UINavigationController *)masterNavigationController; +- (UINavigationController *)detailNavigationController; +- (PostsViewController *)postsViewController; +- (EditorViewController *)editorViewControllerForPhone; +- (EditorViewController *)editorViewControllerForPad; + +@end \ No newline at end of file diff --git a/Blog/BlogSplitViewController.m b/Blog/BlogSplitViewController.m new file mode 100644 index 0000000..b8ab9c9 --- /dev/null +++ b/Blog/BlogSplitViewController.m @@ -0,0 +1,56 @@ +// +// Created by Sami Samhuri on 2015-06-27. +// Copyright (c) 2015 Guru Logic Inc. All rights reserved. +// +#import +#import "BlogSplitViewController.h" +#import "PostsViewController.h" +#import "EditorViewController.h" +#import "SamhuriNet.h" + +@implementation BlogSplitViewController + +- (void)setSite:(SamhuriNet *)site { + _site = site; + self.postsViewController.blogController = self.site.blogController; + self.editorViewControllerForPhone.blogController = self.site.blogController; + self.editorViewControllerForPad.blogController = self.site.blogController; +} + +- (void)awakeFromNib { + [super awakeFromNib]; + self.postsViewController.preferredContentSize = CGSizeMake(320, 600); +} + +- (void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id )coordinator { + [super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator]; + BOOL isCompact = newCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact; + self.postsViewController.clearsSelectionOnViewWillAppear = isCompact; +} + +- (UINavigationController *)masterNavigationController { + return self.viewControllers.firstObject; +} + +- (UINavigationController *)detailNavigationController { + return self.viewControllers.lastObject; +} + +- (PostsViewController *)postsViewController { + return (PostsViewController *)self.masterNavigationController.viewControllers.firstObject; +} + +- (EditorViewController *)editorViewControllerForPhone { + UINavigationController *navigationController = self.masterNavigationController; + if (navigationController.viewControllers.count > 1) { + navigationController = navigationController.viewControllers.lastObject; + } + EditorViewController *editorViewController = (EditorViewController *)navigationController.viewControllers.firstObject; + return editorViewController; +} + +- (EditorViewController *)editorViewControllerForPad { + return (EditorViewController *)self.detailNavigationController.viewControllers.firstObject; +} + +@end \ No newline at end of file diff --git a/Blog/PostsViewController.m b/Blog/PostsViewController.m index 54350cc..9117015 100644 --- a/Blog/PostsViewController.m +++ b/Blog/PostsViewController.m @@ -63,11 +63,6 @@ static const NSUInteger SectionPublished = 1; - (void)awakeFromNib { [super awakeFromNib]; - if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { - self.clearsSelectionOnViewWillAppear = NO; - self.preferredContentSize = CGSizeMake(320.0, 600.0); - } - [self setupTitleView]; [self setupFontAwesomeIcons]; self.refreshControl.tintColor = [UIColor whiteColor];