diff --git a/MSPageViewController/Source/MSPageViewController+Protected.h b/MSPageViewController/Source/MSPageViewController+Protected.h index 4f1e1a4..7fdf1a6 100644 --- a/MSPageViewController/Source/MSPageViewController+Protected.h +++ b/MSPageViewController/Source/MSPageViewController+Protected.h @@ -9,9 +9,6 @@ #import "MSPageViewController.h" /** - * Subclassing notes: - * Child view controllers must conform to `MSPageViewControllerChild`. - * * @see `MSPageViewControllerPage`. */ @interface MSPageViewController () @@ -26,7 +23,7 @@ /** * Can be overriden to perform additional configuration on the controller. */ -- (void)setUpViewController:(UIViewController *)viewController +- (void)setUpViewController:(UIViewController *)viewController atIndex:(NSInteger)index __attribute((objc_requires_super)); /** diff --git a/MSPageViewController/Source/MSPageViewController.h b/MSPageViewController/Source/MSPageViewController.h index 6273bce..e49bba1 100644 --- a/MSPageViewController/Source/MSPageViewController.h +++ b/MSPageViewController/Source/MSPageViewController.h @@ -15,9 +15,3 @@ @interface MSPageViewController : UIPageViewController @end - -@protocol MSPageViewControllerChild - -@property (nonatomic) NSInteger pageIndex; - -@end \ No newline at end of file diff --git a/MSPageViewController/Source/MSPageViewController.m b/MSPageViewController/Source/MSPageViewController.m index 880af8b..3d9ca6a 100644 --- a/MSPageViewController/Source/MSPageViewController.m +++ b/MSPageViewController/Source/MSPageViewController.m @@ -8,6 +8,7 @@ #import "MSPageViewController.h" #import "MSPageViewController+Protected.h" +#import "UIViewController+MSPageViewController.h" @implementation MSPageViewController @@ -47,7 +48,7 @@ - (NSInteger)pageCount { return (NSInteger)self.pageIdentifiers.count; } -- (void)setUpViewController:(UIViewController *)viewController +- (void)setUpViewController:(UIViewController *)viewController atIndex:(NSInteger)index { } @@ -72,34 +73,30 @@ - (void)viewDidLoad { #pragma mark - UIPageViewControllerDataSource - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController - viewControllerBeforeViewController:(UIViewController *)viewController { + viewControllerBeforeViewController:(UIViewController *)viewController { const NSInteger index = viewController.pageIndex; return (index == NSNotFound) ? nil : [self viewControllerAtIndex:index - 1]; } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController - viewControllerAfterViewController:(UIViewController *)viewController { + viewControllerAfterViewController:(UIViewController *)viewController { const NSInteger index = viewController.pageIndex; return (index == NSNotFound) ? nil : [self viewControllerAtIndex:index + 1]; } - (UIViewController *)viewControllerAtIndex:(NSInteger)index { - UIViewController *result = nil; + UIViewController *result = nil; if (index >= 0 && index < self.pageCount) { NSAssert(self.storyboard, @"This controller is only meant to be used inside of a UIStoryboard"); result = [self.storyboard instantiateViewControllerWithIdentifier:self.pageIdentifiers[(NSUInteger)index]]; - + NSParameterAssert(result); - NSAssert([result conformsToProtocol:@protocol(MSPageViewControllerChild)], - @"Child view controller (%@) must conform to %@", - result, - NSStringFromProtocol(@protocol(MSPageViewControllerChild))); - + result.pageIndex = index; [self setUpViewController:result diff --git a/MSPageViewController/Source/MSPageViewControllerPage.h b/MSPageViewController/Source/MSPageViewControllerPage.h deleted file mode 100644 index 9aa1249..0000000 --- a/MSPageViewController/Source/MSPageViewControllerPage.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MSPageViewControllerPage.h -// MSPageViewController -// -// Created by Nacho Soto on 2/16/14. -// Copyright (c) 2014 MindSnacks. All rights reserved. -// - -#import - -#import "MSPageViewController.h" - -@interface MSPageViewControllerPage : UIViewController - -@end diff --git a/MSPageViewController/Source/MSPageViewControllerPage.m b/MSPageViewController/Source/MSPageViewControllerPage.m deleted file mode 100644 index 3364849..0000000 --- a/MSPageViewController/Source/MSPageViewControllerPage.m +++ /dev/null @@ -1,15 +0,0 @@ -// -// MSPageViewControllerPage.m -// MSPageViewController -// -// Created by Nacho Soto on 2/16/14. -// Copyright (c) 2014 MindSnacks. All rights reserved. -// - -#import "MSPageViewControllerPage.h" - -@implementation MSPageViewControllerPage - -@synthesize pageIndex; - -@end diff --git a/MSPageViewController/Source/UIViewController+MSPageViewController.h b/MSPageViewController/Source/UIViewController+MSPageViewController.h new file mode 100644 index 0000000..1fc9972 --- /dev/null +++ b/MSPageViewController/Source/UIViewController+MSPageViewController.h @@ -0,0 +1,14 @@ +// +// UIViewController+MSPageViewController.h +// MSPageViewController +// +// Created by Christoph Keller on 04.12.14. +// + +#import + +@interface UIViewController (MSPageViewController) + +@property (nonatomic) NSInteger pageIndex; + +@end \ No newline at end of file diff --git a/MSPageViewController/Source/UIViewController+MSPageViewController.m b/MSPageViewController/Source/UIViewController+MSPageViewController.m new file mode 100644 index 0000000..456a4cc --- /dev/null +++ b/MSPageViewController/Source/UIViewController+MSPageViewController.m @@ -0,0 +1,24 @@ +// +// UIViewController+MSPageViewController.m +// MSPageViewController +// +// Created by Christoph Keller on 04.12.14. +// + +#import "UIViewController+MSPageViewController.h" +#import + +static char kMSPageViewControllerPageIndexKey; + +@implementation UIViewController (MSPageViewController) + +- (NSInteger)pageIndex { + NSNumber *number = (NSNumber *)objc_getAssociatedObject(self, &kMSPageViewControllerPageIndexKey); + return [number integerValue]; +} + +- (void)setPageIndex:(NSInteger)pageIndex { + objc_setAssociatedObject(self, &kMSPageViewControllerPageIndexKey, @(pageIndex), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end \ No newline at end of file diff --git a/README.md b/README.md index 5bd79fc..ed9c430 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,6 @@ First you must create a [subclass of ```MSPageViewController```](MSPageViewContr Then you have to create a storyboard, add a ```UIPageViewController``` object and change its class to ```MSPageViewController```. Then you can add the controllers, setting their ```Storyboard ID```s to what you returned in ```pageIdentifiers```. -Each of them must be a class that conforms to ```MSPageViewControllerChild``` (if you don't need to add any extra functionality to it you can use [```MSPageViewControllerPage```](MSPageViewController/Source/MSPageViewControllerPage.h)). When your controller is instantiated, it will use these controllers to create each page.