From 24de928f0fcee7f3df3e0624b95c43aecc68ca77 Mon Sep 17 00:00:00 2001 From: Roy Marmelstein Date: Wed, 12 Apr 2017 14:05:14 +0200 Subject: [PATCH] HubViewController as protocol --- HubFramework.xcodeproj/project.pbxproj | 6 -- demo/sources/AppDelegate.swift | 3 +- .../HUBConfigViewControllerFactory.h | 5 +- include/HubFramework/HUBViewController.h | 26 +++--- .../HubFramework/HUBViewControllerFactory.h | 8 +- .../HUBViewControllerScrollHandler.h | 22 ++--- sources/HUBConfigViewControllerFactory.m | 2 +- sources/HUBViewController.m | 84 ------------------- .../HUBViewControllerDefaultScrollHandler.m | 20 ++--- ...ViewControllerExperimentalImplementation.h | 2 +- ...ViewControllerExperimentalImplementation.m | 1 + .../HUBViewControllerFactoryImplementation.m | 12 +-- sources/HUBViewControllerImplementation.h | 4 +- sources/HUBViewControllerImplementation.m | 1 + tests/HUBConfigViewControllerFactoryTests.m | 2 +- tests/HUBLiveServiceTests.m | 2 +- tests/HUBManagerTests.m | 2 +- tests/HUBViewControllerFactoryTests.m | 14 ++-- tests/HUBViewControllerImplementationTests.m | 36 ++++---- .../HUBViewControllerScrollHandlerMock.h | 2 +- .../HUBViewControllerScrollHandlerMock.m | 20 ++--- 21 files changed, 95 insertions(+), 179 deletions(-) delete mode 100644 sources/HUBViewController.m diff --git a/HubFramework.xcodeproj/project.pbxproj b/HubFramework.xcodeproj/project.pbxproj index e5fdf709..b28e7259 100644 --- a/HubFramework.xcodeproj/project.pbxproj +++ b/HubFramework.xcodeproj/project.pbxproj @@ -198,7 +198,6 @@ 8AD0645E1C64F45A0086C081 /* HUBConnectivityStateResolverMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD0645C1C64F4510086C081 /* HUBConnectivityStateResolverMock.m */; }; 8AD064601C64F5460086C081 /* HUBViewModelLoaderTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD0645F1C64F5460086C081 /* HUBViewModelLoaderTests.m */; }; 8AD064661C64F7C30086C081 /* HUBContentOperationMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD064651C64F7C30086C081 /* HUBContentOperationMock.m */; }; - 8AD064691C68DEA10086C081 /* HUBViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD064681C68DEA10086C081 /* HUBViewController.m */; }; 8AD0646C1C68E7B00086C081 /* HUBComponentCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD0646B1C68E7B00086C081 /* HUBComponentCollectionViewCell.m */; }; 8AD064701C68EDA20086C081 /* HUBViewControllerFactoryImplementation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD0646F1C68EDA20086C081 /* HUBViewControllerFactoryImplementation.m */; }; 8AD064741C68F0820086C081 /* HUBViewModelLoaderFactoryImplementation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD064731C68F0820086C081 /* HUBViewModelLoaderFactoryImplementation.m */; }; @@ -335,7 +334,6 @@ 8AE6C0841DF6E4020063B2B1 /* HUBContentOperationExecutionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AA9894A1DD1E3C1006CA6AA /* HUBContentOperationExecutionInfo.m */; }; 8AE6C0851DF6E4020063B2B1 /* HUBContentOperationContextImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = 521891E81DEE3E4500FA3BF7 /* HUBContentOperationContextImplementation.h */; }; 8AE6C0861DF6E4020063B2B1 /* HUBContentOperationContextImplementation.m in Sources */ = {isa = PBXBuildFile; fileRef = 521891E91DEE3E4500FA3BF7 /* HUBContentOperationContextImplementation.m */; }; - 8AE6C0881DF6E4020063B2B1 /* HUBViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AD064681C68DEA10086C081 /* HUBViewController.m */; }; 8AE6C0891DF6E4020063B2B1 /* HUBViewModelImplementation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AF9FA051C5254F5003F3D6C /* HUBViewModelImplementation.h */; }; 8AE6C08A1DF6E4020063B2B1 /* HUBViewModelImplementation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AF9FA061C5254F5003F3D6C /* HUBViewModelImplementation.m */; }; 8AE6C08B1DF6E4020063B2B1 /* HUBViewModelRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = F64C5C2B1DB82CA30077E619 /* HUBViewModelRenderer.h */; }; @@ -745,7 +743,6 @@ 8AD0645F1C64F5460086C081 /* HUBViewModelLoaderTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HUBViewModelLoaderTests.m; sourceTree = ""; }; 8AD064641C64F7C30086C081 /* HUBContentOperationMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HUBContentOperationMock.h; sourceTree = ""; }; 8AD064651C64F7C30086C081 /* HUBContentOperationMock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HUBContentOperationMock.m; sourceTree = ""; }; - 8AD064681C68DEA10086C081 /* HUBViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HUBViewController.m; sourceTree = ""; }; 8AD0646B1C68E7B00086C081 /* HUBComponentCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HUBComponentCollectionViewCell.m; sourceTree = ""; }; 8AD0646E1C68EDA20086C081 /* HUBViewControllerFactoryImplementation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HUBViewControllerFactoryImplementation.h; sourceTree = ""; }; 8AD0646F1C68EDA20086C081 /* HUBViewControllerFactoryImplementation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HUBViewControllerFactoryImplementation.m; sourceTree = ""; }; @@ -1590,7 +1587,6 @@ 8AF9FA041C5254E8003F3D6C /* View */ = { isa = PBXGroup; children = ( - 8AD064681C68DEA10086C081 /* HUBViewController.m */, 6584D5881E82BBA10042666A /* HUBViewControllerImplementation.h */, 6584D5891E82BBA10042666A /* HUBViewControllerImplementation.m */, 6584D6281E82C6A30042666A /* HUBViewControllerExperimentalImplementation.h */, @@ -2001,7 +1997,6 @@ 8A2A72EB1D4B726800141619 /* HUBComponentTargetJSONSchemaImplementation.m in Sources */, 8AD064561C64B6DB0086C081 /* HUBComponentModelJSONSchemaImplementation.m in Sources */, 8A15729B1D9E735C00E9DD4D /* HUBLiveServiceImplementation.m in Sources */, - 8AD064691C68DEA10086C081 /* HUBViewController.m in Sources */, 8A786BA81C5A2E8F00B2AB9E /* HUBJSONSchemaRegistryImplementation.m in Sources */, 8A2A72E61D4B6F1700141619 /* HUBComponentTargetBuilderImplementation.m in Sources */, 8ADA48571D784C1400C27F21 /* HUBAutoEquatable.m in Sources */, @@ -2237,7 +2232,6 @@ 8AE6C0DC1DF6E41B0063B2B1 /* HUBAutoEquatable.m in Sources */, 8AE6C0C81DF6E4100063B2B1 /* HUBDefaultImageLoader.m in Sources */, 8AE6C0A91DF6E40D0063B2B1 /* HUBDefaultComponentFallbackHandler.m in Sources */, - 8AE6C0881DF6E4020063B2B1 /* HUBViewController.m in Sources */, 8AE6C0801DF6E4020063B2B1 /* HUBBlockContentOperation.m in Sources */, 8AE6C08C1DF6E4020063B2B1 /* HUBViewModelRenderer.m in Sources */, 8AE6C0BE1DF6E40D0063B2B1 /* HUBComponentUIStateManager.m in Sources */, diff --git a/demo/sources/AppDelegate.swift b/demo/sources/AppDelegate.swift index 3f76eb35..5811778a 100644 --- a/demo/sources/AppDelegate.swift +++ b/demo/sources/AppDelegate.swift @@ -197,10 +197,11 @@ import HubFramework // MARK: - View controller handling private func prepareAndPush(viewController: HUBViewController, animated: Bool) { + guard let vc = viewController as? UIViewController else { return } viewController.delegate = navigationController viewController.view.backgroundColor = .white viewController.view.contentView?.alwaysBounceVertical = (viewController.viewURI == URL.gitHubSearchViewURI) - navigationController?.pushViewController(viewController, animated: animated) + navigationController?.pushViewController(vc, animated: animated) } } diff --git a/include/HubFramework/HUBConfigViewControllerFactory.h b/include/HubFramework/HUBConfigViewControllerFactory.h index 94ae0965..5403ebba 100644 --- a/include/HubFramework/HUBConfigViewControllerFactory.h +++ b/include/HubFramework/HUBConfigViewControllerFactory.h @@ -20,9 +20,10 @@ */ #import +#import @class HUBConfig; -@class HUBViewController; +@protocol HUBViewController; @protocol HUBActionHandler; @protocol HUBContentOperation; @protocol HUBViewModel; @@ -48,7 +49,7 @@ NS_ASSUME_NONNULL_BEGIN * @param featureTitle Used to set the `featureInfo` on the created view controller. * @param actionHandler Optional custom action handler. See `HUBActionHandler` for more info. */ -- (HUBViewController *)createViewControllerWithConfig:(HUBConfig *)config +- (id)createViewControllerWithConfig:(HUBConfig *)config contentOperations:(NSArray> *)contentOperations viewURI:(NSURL *)viewURI featureIdentifier:(NSString *)featureIdentifier diff --git a/include/HubFramework/HUBViewController.h b/include/HubFramework/HUBViewController.h index 7a2acf5f..6e6e2771 100644 --- a/include/HubFramework/HUBViewController.h +++ b/include/HubFramework/HUBViewController.h @@ -29,7 +29,7 @@ @protocol HUBViewModel; @protocol HUBComponentModel; @protocol HUBImageLoader; -@class HUBViewController; +@protocol HUBViewController; NS_ASSUME_NONNULL_BEGIN @@ -49,7 +49,7 @@ NS_ASSUME_NONNULL_BEGIN * You can use this method to perform any custom UI operations on the whole view controller right before * a new model will be rendered. */ -- (void)viewController:(HUBViewController *)viewController willUpdateWithViewModel:(id)viewModel; +- (void)viewController:(id )viewController willUpdateWithViewModel:(id)viewModel; /** * Sent to a Hub Framework view controller's delegate when it was updated with a new view model @@ -59,7 +59,7 @@ NS_ASSUME_NONNULL_BEGIN * You can use this method to perform any custom UI operations on the whole view controller when a new * view model has been rendered. */ -- (void)viewControllerDidUpdate:(HUBViewController *)viewController; +- (void)viewControllerDidUpdate:(id )viewController; /** * Sent to a Hub Framework view controller's delegate when it failed to be updated because of an error @@ -72,7 +72,7 @@ NS_ASSUME_NONNULL_BEGIN * * Note that you can also use content operations (`HUBContentOperation`) to react to errors, and adjust the UI. */ -- (void)viewController:(HUBViewController *)viewController didFailToUpdateWithError:(NSError *)error; +- (void)viewController:(id )viewController didFailToUpdateWithError:(NSError *)error; /** * Sent to a Hub Framework view controller's delegate when the view finished rendering, due to a view model update. @@ -82,7 +82,7 @@ NS_ASSUME_NONNULL_BEGIN * You can use this method to perform any custom UI operations on the whole view controller right after * a new view model was rendered. */ -- (void)viewControllerDidFinishRendering:(HUBViewController *)viewController; +- (void)viewControllerDidFinishRendering:(id )viewController; /** * Sent to a Hub Framework view controller's delegate to ask it whenever the view controller should start scrolling @@ -92,7 +92,7 @@ NS_ASSUME_NONNULL_BEGIN * This method can be used to veto a scroll event from being started. It will be called every time the user starts * scrolling the view that is rendering body components. */ -- (BOOL)viewControllerShouldStartScrolling:(HUBViewController *)viewController; +- (BOOL)viewControllerShouldStartScrolling:(id )viewController; /** * Sent to a Hub Framework view controller's delegate when a component is about to appear on the screen @@ -102,7 +102,7 @@ NS_ASSUME_NONNULL_BEGIN * @param layoutTraits The layout traits of the component that is about to appear * @param componentView The view that the component is about to appear in */ -- (void)viewController:(HUBViewController *)viewController +- (void)viewController:(id)viewController componentWithModel:(id)componentModel layoutTraits:(NSSet *)layoutTraits willAppearInView:(UIView *)componentView; @@ -115,7 +115,7 @@ NS_ASSUME_NONNULL_BEGIN * @param layoutTraits The layout traits of the component that disappeared * @param componentView The view that the component disappeared from */ -- (void)viewController:(HUBViewController *)viewController +- (void)viewController:(id)viewController componentWithModel:(id)componentModel layoutTraits:(NSSet *)layoutTraits didDisappearFromView:(UIView *)componentView; @@ -126,7 +126,7 @@ NS_ASSUME_NONNULL_BEGIN * @param viewController The view controller in which a component view will be reused * @param componentView The component view that will be reused */ -- (void)viewController:(HUBViewController *)viewController +- (void)viewController:(id)viewController willReuseComponentWithView:(UIView *)componentView; /** @@ -135,7 +135,7 @@ NS_ASSUME_NONNULL_BEGIN * @param viewController The view controller in which the component was selected * @param componentModel The model of the component that was selected */ -- (void)viewController:(HUBViewController *)viewController componentSelectedWithModel:(id)componentModel; +- (void)viewController:(id)viewController componentSelectedWithModel:(id)componentModel; /** * Sent to a Hub Framework view controller's delegate to ask if view controller should automatically @@ -146,7 +146,7 @@ NS_ASSUME_NONNULL_BEGIN * @discussion When view controller automatically manages content inset it puts body components * below header component and below navigation bar. */ -- (BOOL)viewControllerShouldAutomaticallyManageTopContentInset:(HUBViewController *)viewController; +- (BOOL)viewControllerShouldAutomaticallyManageTopContentInset:(id)viewController; /** * Return the center point of overlay coponents used in a view controller. @@ -157,7 +157,7 @@ NS_ASSUME_NONNULL_BEGIN * The Hub Framework will call this method every time a view controller is being laid out, which is usually in * response to that its view model has been changed. The returned value will be set as a center point of the overlay. */ -- (CGPoint)centerPointForOverlayComponentInViewController:(HUBViewController *)viewController +- (CGPoint)centerPointForOverlayComponentInViewController:(id)viewController proposedCenterPoint:(CGPoint)proposedCenterPoint; @end @@ -170,7 +170,7 @@ NS_ASSUME_NONNULL_BEGIN * This view controller renders `HUBComponent` instances using a collection view. What components that are rendered * are determined by `HUBContentOperation`s that build a `HUBViewModel`. */ -@interface HUBViewController : UIViewController +@protocol HUBViewController /// The view controller's delegate. See `HUBViewControllerDelegate` for more information. @property (nonatomic, weak, nullable) id delegate; diff --git a/include/HubFramework/HUBViewControllerFactory.h b/include/HubFramework/HUBViewControllerFactory.h index 04e29088..7a0d21e3 100644 --- a/include/HubFramework/HUBViewControllerFactory.h +++ b/include/HubFramework/HUBViewControllerFactory.h @@ -21,7 +21,7 @@ #import -@class HUBViewController; +@protocol HUBViewController; @protocol HUBContentOperation; NS_ASSUME_NONNULL_BEGIN @@ -60,7 +60,7 @@ NS_ASSUME_NONNULL_BEGIN * To be able to create a view controller without creating a feature, you can use the other view controller * creation methods available on this protocol. */ -- (nullable HUBViewController *)createViewControllerForViewURI:(NSURL *)viewURI; +- (nullable id)createViewControllerForViewURI:(NSURL *)viewURI; /** * Create a view controller without a feature registration, with implicit identifiers @@ -72,7 +72,7 @@ NS_ASSUME_NONNULL_BEGIN * The view controller's feature identifier and view URI will be set by transforming the given feature * title into lowercase characters. */ -- (HUBViewController *)createViewControllerWithContentOperations:(NSArray> *)contentOperations +- (id)createViewControllerWithContentOperations:(NSArray> *)contentOperations featureTitle:(NSString *)featureTitle NS_SWIFT_NAME(createViewController(withContentOperations:featureTitle:)); /** @@ -86,7 +86,7 @@ NS_ASSUME_NONNULL_BEGIN * @param featureTitle The title of the feature that the view controller will belong to. Used for its * default title, and also made available to contnet operations as part of `HUBFeatureInfo`. */ -- (HUBViewController *)createViewControllerForViewURI:(NSURL *)viewURI +- (id)createViewControllerForViewURI:(NSURL *)viewURI contentOperations:(NSArray> *)contentOperations featureIdentifier:(NSString *)featureIdentifier featureTitle:(NSString *)featureTitle; diff --git a/include/HubFramework/HUBViewControllerScrollHandler.h b/include/HubFramework/HUBViewControllerScrollHandler.h index 74ea8a0e..ac8bb23c 100644 --- a/include/HubFramework/HUBViewControllerScrollHandler.h +++ b/include/HubFramework/HUBViewControllerScrollHandler.h @@ -22,7 +22,7 @@ #import #import "HUBScrollPosition.h" -@class HUBViewController; +@protocol HUBViewController; /** * Protocol used to define custom scroll handlers for Hub Framework view controllers @@ -41,7 +41,7 @@ * The Hub Framework will call this method when a view controller is being set up. The returned * value will be used for both horizontal & vertical scroll indicators. */ -- (BOOL)shouldShowScrollIndicatorsInViewController:(HUBViewController *)viewController; +- (BOOL)shouldShowScrollIndicatorsInViewController:(id)viewController; /** * Return whether the system's automatic adjustment of content insets should be used for a view controller @@ -52,7 +52,7 @@ * assigned to its `automaticallyAdjustsScrollViewInsets` property, so see the documentation for that property * on `UIViewController` for more information. */ -- (BOOL)shouldAutomaticallyAdjustContentInsetsInViewController:(HUBViewController *)viewController; +- (BOOL)shouldAutomaticallyAdjustContentInsetsInViewController:(id)viewController; /** * Return the manner in which the keyboard is dismissed when the content in the view controller is dragged @@ -63,7 +63,7 @@ * assigned to the `keyboardDismissMode` property of the used scroll view, so see the documentation for that property * on `UIScrollView` for more information. */ -- (UIScrollViewKeyboardDismissMode)keyboardDismissModeForViewController:(HUBViewController *)viewController; +- (UIScrollViewKeyboardDismissMode)keyboardDismissModeForViewController:(id)viewController; /** * Return the deceleration rate to use for scrolling in a view controller @@ -73,7 +73,7 @@ * The Hub Framework will call this method when a view controller is being set up. The returned value will be * assied to the `decelerationRate` property of its internal scroll view. */ -- (CGFloat)scrollDecelerationRateForViewController:(HUBViewController *)viewController; +- (CGFloat)scrollDecelerationRateForViewController:(id)viewController; /** * Return the content insets to use for a view controller @@ -86,7 +86,7 @@ * response to that its view model has been changed. The returned value will be assigned to the `contentInset` * property of its internal scroll view. */ -- (UIEdgeInsets)contentInsetsForViewController:(HUBViewController *)viewController +- (UIEdgeInsets)contentInsetsForViewController:(id)viewController proposedContentInsets:(UIEdgeInsets)proposedContentInsets; /** @@ -95,7 +95,7 @@ * @param viewController The view controller in question * @param currentContentRect The rectangle of the currently visible content in the view controller's scroll view */ -- (void)scrollingWillStartInViewController:(HUBViewController *)viewController +- (void)scrollingWillStartInViewController:(id)viewController currentContentRect:(CGRect)currentContentRect; /** @@ -104,7 +104,7 @@ * @param viewController The view controller in question * @param contentOffest The scroll view's content offset */ -- (void)scrollViewDidScrollInViewController:(HUBViewController *)viewController +- (void)scrollViewDidScrollInViewController:(id)viewController withContentOffset:(CGPoint)contentOffest; /** @@ -113,7 +113,7 @@ * @param viewController The view controller in question * @param currentContentRect The rectangle of the currently visible content in the view controller's scroll view */ -- (void)scrollingDidEndInViewController:(HUBViewController *)viewController +- (void)scrollingDidEndInViewController:(id)viewController currentContentRect:(CGRect)currentContentRect; /** @@ -125,7 +125,7 @@ * @param currentContentOffset The current scrolling content offset * @param proposedContentOffset The target content offset that the Hub Framework is proposing will be used */ -- (CGPoint)targetContentOffsetForEndedScrollInViewController:(HUBViewController *)viewController +- (CGPoint)targetContentOffsetForEndedScrollInViewController:(id)viewController velocity:(CGVector)velocity contentInset:(UIEdgeInsets)contentInset currentContentOffset:(CGPoint)currentContentOffset @@ -144,6 +144,6 @@ scrollPosition:(HUBScrollPosition)scrollPosition contentInset:(UIEdgeInsets)contentInset contentSize:(CGSize)contentSize - viewController:(HUBViewController *)viewController; + viewController:(id)viewController; @end diff --git a/sources/HUBConfigViewControllerFactory.m b/sources/HUBConfigViewControllerFactory.m index eb4d908b..d01694d3 100644 --- a/sources/HUBConfigViewControllerFactory.m +++ b/sources/HUBConfigViewControllerFactory.m @@ -36,7 +36,7 @@ @implementation HUBConfigViewControllerFactory -- (HUBViewController *)createViewControllerWithConfig:(HUBConfig *)config +- (id)createViewControllerWithConfig:(HUBConfig *)config contentOperations:(NSArray> *)contentOperations viewURI:(NSURL *)viewURI featureIdentifier:(NSString *)featureIdentifier diff --git a/sources/HUBViewController.m b/sources/HUBViewController.m deleted file mode 100644 index f6fdef36..00000000 --- a/sources/HUBViewController.m +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2016 Spotify AB. - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#import "HUBViewController.h" - -NS_ASSUME_NONNULL_BEGIN - -@implementation HUBViewController - -@dynamic view; - -- (NSDictionary *)visibleComponentViewsForComponentType:(HUBComponentType)componentType -{ - return @{}; -} - -- (nullable UIView *)visibleViewForComponentOfType:(HUBComponentType)componentType indexPath:(NSIndexPath *)indexPath -{ - return nil; -} - -- (CGRect)frameForBodyComponentAtIndex:(NSUInteger)index -{ - return CGRectNull; -} - -- (NSUInteger)indexOfBodyComponentAtPoint:(CGPoint)point -{ - return NSNotFound; -} - -- (void)scrollToContentOffset:(CGPoint)contentOffset animated:(BOOL)animated -{ -} - -- (void)scrollToComponentOfType:(HUBComponentType)componentType - indexPath:(NSIndexPath *)indexPath - scrollPosition:(HUBScrollPosition)scrollPosition - animated:(BOOL)animated - completion:(void (^ _Nullable)(NSIndexPath *))completion -{ -} - --(void)reload -{ -} - -- (BOOL)selectComponentWithModel:(id)componentModel customData:(nullable NSDictionary *)customData -{ - return NO; -} - -- (void)cancelComponentSelection -{ -} - -#pragma mark - HUBActionPerformer - -- (BOOL)performActionWithIdentifier:(HUBIdentifier *)identifier customData:(nullable NSDictionary *)customData -{ - return NO; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/sources/HUBViewControllerDefaultScrollHandler.m b/sources/HUBViewControllerDefaultScrollHandler.m index 0c8c2a2f..b6b5fba5 100644 --- a/sources/HUBViewControllerDefaultScrollHandler.m +++ b/sources/HUBViewControllerDefaultScrollHandler.m @@ -28,50 +28,50 @@ @implementation HUBViewControllerDefaultScrollHandler -- (BOOL)shouldShowScrollIndicatorsInViewController:(HUBViewController *)viewController +- (BOOL)shouldShowScrollIndicatorsInViewController:(id)viewController { return YES; } -- (BOOL)shouldAutomaticallyAdjustContentInsetsInViewController:(HUBViewController *)viewController +- (BOOL)shouldAutomaticallyAdjustContentInsetsInViewController:(id)viewController { return YES; } -- (UIScrollViewKeyboardDismissMode)keyboardDismissModeForViewController:(HUBViewController *)viewController +- (UIScrollViewKeyboardDismissMode)keyboardDismissModeForViewController:(id)viewController { return UIScrollViewKeyboardDismissModeNone; } -- (CGFloat)scrollDecelerationRateForViewController:(HUBViewController *)viewController +- (CGFloat)scrollDecelerationRateForViewController:(id)viewController { return UIScrollViewDecelerationRateNormal; } -- (UIEdgeInsets)contentInsetsForViewController:(HUBViewController *)viewController +- (UIEdgeInsets)contentInsetsForViewController:(id)viewController proposedContentInsets:(UIEdgeInsets)proposedContentInsets { return proposedContentInsets; } -- (void)scrollViewDidScrollInViewController:(HUBViewController *)viewController withContentOffset:(CGPoint)contentOffest +- (void)scrollViewDidScrollInViewController:(id)viewController withContentOffset:(CGPoint)contentOffest { // No-op } -- (void)scrollingWillStartInViewController:(HUBViewController *)viewController +- (void)scrollingWillStartInViewController:(id)viewController currentContentRect:(CGRect)currentContentRect { // No-op } -- (void)scrollingDidEndInViewController:(HUBViewController *)viewController currentContentRect:(CGRect)currentContentRect +- (void)scrollingDidEndInViewController:(id)viewController currentContentRect:(CGRect)currentContentRect { // No-op } -- (CGPoint)targetContentOffsetForEndedScrollInViewController:(HUBViewController *)viewController +- (CGPoint)targetContentOffsetForEndedScrollInViewController:(id)viewController velocity:(CGVector)velocity contentInset:(UIEdgeInsets)contentInset currentContentOffset:(CGPoint)currentContentOffset @@ -84,7 +84,7 @@ - (CGPoint)contentOffsetForDisplayingComponentAtIndex:(NSUInteger)componentIndex scrollPosition:(HUBScrollPosition)scrollPosition contentInset:(UIEdgeInsets)contentInset contentSize:(CGSize)contentSize - viewController:(HUBViewController *)viewController + viewController:(id)viewController { CGRect const componentFrame = [viewController frameForBodyComponentAtIndex:componentIndex]; CGFloat const viewHeight = CGRectGetHeight(viewController.view.frame); diff --git a/sources/HUBViewControllerExperimentalImplementation.h b/sources/HUBViewControllerExperimentalImplementation.h index 1ee96b6d..3723a225 100644 --- a/sources/HUBViewControllerExperimentalImplementation.h +++ b/sources/HUBViewControllerExperimentalImplementation.h @@ -34,7 +34,7 @@ NS_ASSUME_NONNULL_BEGIN /// Extension enabling a HUBViewControllerExperimentalImplementation instance to be initialized by the framework -@interface HUBViewControllerExperimentalImplementation : HUBViewController +@interface HUBViewControllerExperimentalImplementation : UIViewController /** * Initialize an instance of this class with its required dependencies diff --git a/sources/HUBViewControllerExperimentalImplementation.m b/sources/HUBViewControllerExperimentalImplementation.m index 53bc149e..fb8bf9ba 100644 --- a/sources/HUBViewControllerExperimentalImplementation.m +++ b/sources/HUBViewControllerExperimentalImplementation.m @@ -94,6 +94,7 @@ @implementation HUBViewControllerExperimentalImplementation @synthesize viewModel = _viewModel; @synthesize viewURI = _viewURI; +@synthesize delegate = _delegate; #pragma mark - Lifecycle diff --git a/sources/HUBViewControllerFactoryImplementation.m b/sources/HUBViewControllerFactoryImplementation.m index 37da9555..3ee47639 100644 --- a/sources/HUBViewControllerFactoryImplementation.m +++ b/sources/HUBViewControllerFactoryImplementation.m @@ -96,7 +96,7 @@ - (BOOL)canCreateViewControllerForViewURI:(NSURL *)viewURI return [self.viewModelLoaderFactory canCreateViewModelLoaderForViewURI:viewURI]; } -- (nullable HUBViewController *)createViewControllerForViewURI:(NSURL *)viewURI +- (nullable id)createViewControllerForViewURI:(NSURL *)viewURI { HUBFeatureRegistration * const featureRegistration = [self.featureRegistry featureRegistrationForViewURI:viewURI]; @@ -107,7 +107,7 @@ - (nullable HUBViewController *)createViewControllerForViewURI:(NSURL *)viewURI return [self createViewControllerForViewURI:viewURI featureRegistration:featureRegistration]; } -- (HUBViewController *)createViewControllerWithContentOperations:(NSArray> *)contentOperations +- (id)createViewControllerWithContentOperations:(NSArray> *)contentOperations featureTitle:(NSString *)featureTitle { NSString * const identifier = [featureTitle lowercaseString]; @@ -119,7 +119,7 @@ - (HUBViewController *)createViewControllerWithContentOperations:(NSArray)createViewControllerForViewURI:(NSURL *)viewURI contentOperations:(NSArray> *)contentOperations featureIdentifier:(NSString *)featureIdentifier featureTitle:(NSString *)featureTitle @@ -144,7 +144,7 @@ - (HUBViewController *)createViewControllerForViewURI:(NSURL *)viewURI #pragma mark - Private utilities -- (HUBViewController *)createViewControllerForViewURI:(NSURL *)viewURI +- (id)createViewControllerForViewURI:(NSURL *)viewURI featureRegistration:(HUBFeatureRegistration *)featureRegistration { BOOL useV2 = [featureRegistration.options[@"HUBViewController"] isEqualToString:@"v2"]; @@ -155,7 +155,7 @@ - (HUBViewController *)createViewControllerForViewURI:(NSURL *)viewURI } } -- (HUBViewController *)createStandardViewControllerForViewURI:(NSURL *)viewURI +- (id)createStandardViewControllerForViewURI:(NSURL *)viewURI featureRegistration:(HUBFeatureRegistration *)featureRegistration { id const featureInfo = [[HUBFeatureInfoImplementation alloc] initWithIdentifier:featureRegistration.featureIdentifier @@ -190,7 +190,7 @@ - (HUBViewController *)createStandardViewControllerForViewURI:(NSURL *)viewURI imageLoader:imageLoader]; } -- (HUBViewController *)createExperimentalViewControllerForViewURI:(NSURL *)viewURI +- (id)createExperimentalViewControllerForViewURI:(NSURL *)viewURI featureRegistration:(HUBFeatureRegistration *)featureRegistration { id const featureInfo = [[HUBFeatureInfoImplementation alloc] initWithIdentifier:featureRegistration.featureIdentifier diff --git a/sources/HUBViewControllerImplementation.h b/sources/HUBViewControllerImplementation.h index effa15f3..970a12e8 100644 --- a/sources/HUBViewControllerImplementation.h +++ b/sources/HUBViewControllerImplementation.h @@ -28,6 +28,8 @@ @protocol HUBViewControllerScrollHandler; @protocol HUBImageLoader; @protocol HUBViewModelLoader; +@protocol HUBViewController; + @class HUBCollectionViewFactory; @class HUBComponentReusePool; @class HUBViewModelRenderer; @@ -35,7 +37,7 @@ NS_ASSUME_NONNULL_BEGIN /// Extension enabling a HUBViewControllerImplementation instance to be initialized by the framework -@interface HUBViewControllerImplementation : HUBViewController +@interface HUBViewControllerImplementation : UIViewController /** * Initialize an instance of this class with its required dependencies diff --git a/sources/HUBViewControllerImplementation.m b/sources/HUBViewControllerImplementation.m index 2db13f19..0c5c6648 100644 --- a/sources/HUBViewControllerImplementation.m +++ b/sources/HUBViewControllerImplementation.m @@ -95,6 +95,7 @@ @implementation HUBViewControllerImplementation @synthesize viewModel = _viewModel; @synthesize viewURI = _viewURI; +@synthesize delegate = _delegate; #pragma mark - Lifecycle diff --git a/tests/HUBConfigViewControllerFactoryTests.m b/tests/HUBConfigViewControllerFactoryTests.m index 9eb1536c..fbedb6f1 100644 --- a/tests/HUBConfigViewControllerFactoryTests.m +++ b/tests/HUBConfigViewControllerFactoryTests.m @@ -39,7 +39,7 @@ - (void)testFactoryCanCreateViewController id contentOperation = [HUBContentOperationMock new]; NSURL *viewURI = (id)[NSURL URLWithString:@"test-uri"]; - HUBViewController * const viewController = [factory createViewControllerWithConfig:config + id const viewController = [factory createViewControllerWithConfig:config contentOperations:@[contentOperation] viewURI:viewURI featureIdentifier:@"test" diff --git a/tests/HUBLiveServiceTests.m b/tests/HUBLiveServiceTests.m index dcd6529d..9be25918 100644 --- a/tests/HUBLiveServiceTests.m +++ b/tests/HUBLiveServiceTests.m @@ -108,7 +108,7 @@ - (void)testCreatingAndReusingViewController id const contentOperation = self.contentOperation; XCTAssertNotNil(contentOperation); - HUBViewController *viewController = [self.hubManager.viewControllerFactory createViewControllerWithContentOperations:@[contentOperation] + idviewController = [self.hubManager.viewControllerFactory createViewControllerWithContentOperations:@[contentOperation] featureTitle:@"Test"]; [viewController viewWillAppear:YES]; [viewController viewDidLayoutSubviews]; diff --git a/tests/HUBManagerTests.m b/tests/HUBManagerTests.m index 7f4d516c..cfae22b3 100644 --- a/tests/HUBManagerTests.m +++ b/tests/HUBManagerTests.m @@ -98,7 +98,7 @@ - (void)testUsingInitializerWithDefaults return YES; }; - HUBViewController * const viewController = [manager.viewControllerFactory createViewControllerForViewURI:viewURI + id const viewController = [manager.viewControllerFactory createViewControllerForViewURI:viewURI contentOperations:@[contentOperation] featureIdentifier:@"feature" featureTitle:@"Feature"]; diff --git a/tests/HUBViewControllerFactoryTests.m b/tests/HUBViewControllerFactoryTests.m index 074e6f92..d427aeff 100644 --- a/tests/HUBViewControllerFactoryTests.m +++ b/tests/HUBViewControllerFactoryTests.m @@ -112,7 +112,7 @@ - (void)testCreatingViewControllerWithoutOptions [self registerFeatureWithViewURI:viewURI options:nil]; XCTAssertTrue([self.manager.viewControllerFactory canCreateViewControllerForViewURI:viewURI]); - HUBViewController * const viewController = [self.manager.viewControllerFactory createViewControllerForViewURI:viewURI]; + id const viewController = [self.manager.viewControllerFactory createViewControllerForViewURI:viewURI]; XCTAssertTrue([viewController isKindOfClass:[HUBViewControllerImplementation class]]); } @@ -122,7 +122,7 @@ - (void)testCreatingViewControllerWithIncorrectHUBViewControllerOptions [self registerFeatureWithViewURI:viewURI options:@{@"HUBViewController" : @"unexpectedValue"}]; XCTAssertTrue([self.manager.viewControllerFactory canCreateViewControllerForViewURI:viewURI]); - HUBViewController * const viewController = [self.manager.viewControllerFactory createViewControllerForViewURI:viewURI]; + id const viewController = [self.manager.viewControllerFactory createViewControllerForViewURI:viewURI]; XCTAssertTrue([viewController isKindOfClass:[HUBViewControllerImplementation class]]); } @@ -132,7 +132,7 @@ - (void)testCreatingViewControllerWithExperimentalHUBViewControllerOptions [self registerFeatureWithViewURI:viewURI options:@{@"HUBViewController" : @"v2"}]; XCTAssertTrue([self.manager.viewControllerFactory canCreateViewControllerForViewURI:viewURI]); - HUBViewController * const viewController = [self.manager.viewControllerFactory createViewControllerForViewURI:viewURI]; + id const viewController = [self.manager.viewControllerFactory createViewControllerForViewURI:viewURI]; XCTAssertTrue([viewController isKindOfClass:[HUBViewControllerExperimentalImplementation class]]); } @@ -142,7 +142,7 @@ - (void)testCreatingViewControllerForValidViewURI [self registerFeatureWithViewURI:viewURI options:nil]; XCTAssertTrue([self.manager.viewControllerFactory canCreateViewControllerForViewURI:viewURI]); - HUBViewController * const viewController = [self.manager.viewControllerFactory createViewControllerForViewURI:viewURI]; + id const viewController = [self.manager.viewControllerFactory createViewControllerForViewURI:viewURI]; XCTAssertEqualObjects(viewController.viewURI, viewURI); } @@ -165,7 +165,7 @@ - (void)testCreatingViewControllerWithoutFeatureRegistration return YES; }; - HUBViewController * const viewController = [self.manager.viewControllerFactory createViewControllerForViewURI:viewURI + id const viewController = [self.manager.viewControllerFactory createViewControllerForViewURI:viewURI contentOperations:@[contentOperation] featureIdentifier:@"identifier" featureTitle:@"Title"]; @@ -186,7 +186,7 @@ - (void)testCreatingViewControllerWithImplicitIdentifiers return YES; }; - HUBViewController * const viewController = [self.manager.viewControllerFactory createViewControllerWithContentOperations:@[contentOperation] + id const viewController = [self.manager.viewControllerFactory createViewControllerWithContentOperations:@[contentOperation] featureTitle:@"Feature"]; [viewController viewWillAppear:NO]; @@ -247,7 +247,7 @@ - (void)testDefaultActionHandlerUsedIfFeatureDidNotSupplyOne return YES; }; - HUBViewController * const viewController = [self.manager.viewControllerFactory createViewControllerForViewURI:viewURI]; + id const viewController = [self.manager.viewControllerFactory createViewControllerForViewURI:viewURI]; [viewController viewWillAppear:YES]; id const componentModel = viewController.viewModel.bodyComponentModels[0]; diff --git a/tests/HUBViewControllerImplementationTests.m b/tests/HUBViewControllerImplementationTests.m index ec8fecbb..4d3bd2dc 100644 --- a/tests/HUBViewControllerImplementationTests.m +++ b/tests/HUBViewControllerImplementationTests.m @@ -83,7 +83,7 @@ @interface HUBViewControllerImplementationTests : XCTestCase viewController; @property (nonatomic, strong) id viewModelFromDelegateMethod; @property (nonatomic, strong) NSError *errorFromDelegateMethod; @property (nonatomic, strong) NSMutableArray> *componentModelsFromAppearanceDelegateMethod; @@ -1666,7 +1666,7 @@ - (void)testRenderingUpdatesContentInsetBeforeAndAfterRendering }; __block NSUInteger numberOfContentInsetCalls = 0; - self.scrollHandler.contentInsetHandler = ^UIEdgeInsets(HUBViewController *controller, UIEdgeInsets insets) { + self.scrollHandler.contentInsetHandler = ^UIEdgeInsets(idcontroller, UIEdgeInsets insets) { numberOfContentInsetCalls += 1; if (numberOfContentInsetCalls == 1) { assertInsetsEqualToCollectionViewInsets(UIEdgeInsetsZero); @@ -1696,7 +1696,7 @@ - (void)testProposedContentInsetIsDefaultIfHeaderMissing __block NSUInteger numberOfInsetCalls = 0; __weak XCTestExpectation * const expectation = [self expectationWithDescription:@"The content inset handler should be asked for the content inset"]; - self.scrollHandler.contentInsetHandler = ^UIEdgeInsets(HUBViewController *controller, UIEdgeInsets proposedInsets) { + self.scrollHandler.contentInsetHandler = ^UIEdgeInsets(idcontroller, UIEdgeInsets proposedInsets) { assertInsetsEqualToCollectionViewInsets(proposedInsets, expectedInsets); numberOfInsetCalls += 1; if (numberOfInsetCalls == 2) { @@ -1735,7 +1735,7 @@ - (void)testProposedContentInsetNotAffectedByHeaderComponent __block NSUInteger numberOfInsetCalls = 0; __weak XCTestExpectation * const expectation = [self expectationWithDescription:@"The content inset handler should be asked for the content inset"]; - self.scrollHandler.contentInsetHandler = ^UIEdgeInsets(HUBViewController *controller, UIEdgeInsets proposedInsets) { + self.scrollHandler.contentInsetHandler = ^UIEdgeInsets(idcontroller, UIEdgeInsets proposedInsets) { assertInsetsEqualToCollectionViewInsets(proposedInsets, UIEdgeInsetsZero); numberOfInsetCalls += 1; if (numberOfInsetCalls == 2) { @@ -1826,7 +1826,7 @@ - (void)testHeaderMarginAlwaysBasedOnComponentPreferredViewSize return YES; }; - self.scrollHandler.contentInsetHandler = ^(HUBViewController *viewController, UIEdgeInsets proposedContentInsets) { + self.scrollHandler.contentInsetHandler = ^(idviewController, UIEdgeInsets proposedContentInsets) { return proposedContentInsets; }; @@ -2210,7 +2210,7 @@ - (void)testCollectionViewSetupUsingScrollHandler self.scrollHandler.shouldAutomaticallyAdjustContentInsets = YES; self.scrollHandler.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; self.scrollHandler.scrollDecelerationRate = UIScrollViewDecelerationRateNormal; - self.scrollHandler.contentInsetHandler = ^(HUBViewController *viewController, UIEdgeInsets proposedContentInset) { + self.scrollHandler.contentInsetHandler = ^(idviewController, UIEdgeInsets proposedContentInset) { return UIEdgeInsetsMake(100, 30, 40, 200); }; @@ -2725,7 +2725,7 @@ - (void)testScrollingToComponentAfterViewModelFinishesRendering return YES; }; - self.scrollHandler.contentInsetHandler = ^(HUBViewController *viewController, UIEdgeInsets proposedContentInset) { + self.scrollHandler.contentInsetHandler = ^(idviewController, UIEdgeInsets proposedContentInset) { return UIEdgeInsetsMake(100, 30, 40, 200); }; @@ -3015,25 +3015,25 @@ - (void)testThatModelIsNotSetImmediatelyOnOverlappingRenderAndLayoutRequests #pragma mark - HUBViewControllerDelegate -- (void)viewController:(HUBViewController *)viewController willUpdateWithViewModel:(id)viewModel +- (void)viewController:(id)viewController willUpdateWithViewModel:(id)viewModel { XCTAssertEqual(viewController, self.viewController); self.viewModelFromDelegateMethod = viewModel; } -- (void)viewControllerDidUpdate:(HUBViewController *)viewController +- (void)viewControllerDidUpdate:(id)viewController { XCTAssertEqual(viewController, self.viewController); XCTAssertEqual(self.viewModelFromDelegateMethod, viewController.viewModel); } -- (void)viewController:(HUBViewController *)viewController didFailToUpdateWithError:(NSError *)error +- (void)viewController:(id)viewController didFailToUpdateWithError:(NSError *)error { XCTAssertEqual(viewController, self.viewController); self.errorFromDelegateMethod = error; } -- (void)viewControllerDidFinishRendering:(HUBViewController *)viewController +- (void)viewControllerDidFinishRendering:(id)viewController { XCTAssertEqual(viewController, self.viewController); self.didReceiveViewControllerDidFinishRendering = YES; @@ -3043,7 +3043,7 @@ - (void)viewControllerDidFinishRendering:(HUBViewController *)viewController } } -- (BOOL)viewControllerShouldStartScrolling:(HUBViewController *)viewController +- (BOOL)viewControllerShouldStartScrolling:(id)viewController { if (self.viewControllerShouldStartScrollingBlock) { return self.viewControllerShouldStartScrollingBlock(); @@ -3051,7 +3051,7 @@ - (BOOL)viewControllerShouldStartScrolling:(HUBViewController *)viewController return NO; } -- (void)viewController:(HUBViewController *)viewController +- (void)viewController:(id)viewController componentWithModel:(id)componentModel layoutTraits:(NSSet *)layoutTraits willAppearInView:(nonnull UIView *)componentView @@ -3064,7 +3064,7 @@ - (void)viewController:(HUBViewController *)viewController [self.componentLayoutTraitsFromAppearanceDelegateMethod addObject:layoutTraits]; } -- (void)viewController:(HUBViewController *)viewController +- (void)viewController:(id)viewController componentWithModel:(id)componentModel layoutTraits:(NSSet *)layoutTraits didDisappearFromView:(UIView *)componentView @@ -3075,20 +3075,20 @@ - (void)viewController:(HUBViewController *)viewController [self.componentLayoutTraitsFromDisapperanceDelegateMethod addObject:layoutTraits]; } -- (void)viewController:(HUBViewController *)viewController willReuseComponentWithView:(UIView *)componentView +- (void)viewController:(id)viewController willReuseComponentWithView:(UIView *)componentView { XCTAssertEqual(viewController, self.viewController); [self.componentViewsFromReuseDelegateMethod addObject:componentView]; } -- (void)viewController:(HUBViewController *)viewController componentSelectedWithModel:(id)componentModel +- (void)viewController:(id)viewController componentSelectedWithModel:(id)componentModel { XCTAssertEqual(viewController, self.viewController); [self.componentModelsFromSelectionDelegateMethod addObject:componentModel]; } -- (BOOL)viewControllerShouldAutomaticallyManageTopContentInset:(HUBViewController *)viewController +- (BOOL)viewControllerShouldAutomaticallyManageTopContentInset:(id)viewController { XCTAssertEqual(viewController, self.viewController); if (self.viewControllerShouldAutomaticallyManageTopContentInset) { @@ -3097,7 +3097,7 @@ - (BOOL)viewControllerShouldAutomaticallyManageTopContentInset:(HUBViewControlle return NO; } -- (CGPoint)centerPointForOverlayComponentInViewController:(HUBViewController *)viewController +- (CGPoint)centerPointForOverlayComponentInViewController:(id)viewController proposedCenterPoint:(CGPoint)proposedCenterPoint { XCTAssertEqual(viewController, self.viewController); diff --git a/tests/mocks/HUBViewControllerScrollHandlerMock.h b/tests/mocks/HUBViewControllerScrollHandlerMock.h index de8eb94d..7e9f7639 100644 --- a/tests/mocks/HUBViewControllerScrollHandlerMock.h +++ b/tests/mocks/HUBViewControllerScrollHandlerMock.h @@ -57,7 +57,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, copy) void (^ _Nullable scrollingDidEndHandler)(CGRect contentRect); /// A block that can be used instead of the @c contentInset property to determine the content inset. -@property (nonatomic, copy) UIEdgeInsets (^ _Nullable contentInsetHandler)(HUBViewController *controller, UIEdgeInsets proposedOffset); +@property (nonatomic, copy) UIEdgeInsets (^ _Nullable contentInsetHandler)(idcontroller, UIEdgeInsets proposedOffset); @end diff --git a/tests/mocks/HUBViewControllerScrollHandlerMock.m b/tests/mocks/HUBViewControllerScrollHandlerMock.m index 0b117062..227d4f16 100644 --- a/tests/mocks/HUBViewControllerScrollHandlerMock.m +++ b/tests/mocks/HUBViewControllerScrollHandlerMock.m @@ -33,27 +33,27 @@ @interface HUBViewControllerScrollHandlerMock () @implementation HUBViewControllerScrollHandlerMock -- (BOOL)shouldShowScrollIndicatorsInViewController:(HUBViewController *)viewController +- (BOOL)shouldShowScrollIndicatorsInViewController:(id)viewController { return self.shouldShowScrollIndicators; } -- (BOOL)shouldAutomaticallyAdjustContentInsetsInViewController:(HUBViewController *)viewController +- (BOOL)shouldAutomaticallyAdjustContentInsetsInViewController:(id)viewController { return self.shouldAutomaticallyAdjustContentInsets; } -- (UIScrollViewKeyboardDismissMode)keyboardDismissModeForViewController:(HUBViewController *)viewController +- (UIScrollViewKeyboardDismissMode)keyboardDismissModeForViewController:(id)viewController { return self.keyboardDismissMode; } -- (CGFloat)scrollDecelerationRateForViewController:(HUBViewController *)viewController +- (CGFloat)scrollDecelerationRateForViewController:(id)viewController { return self.scrollDecelerationRate; } -- (UIEdgeInsets)contentInsetsForViewController:(HUBViewController *)viewController +- (UIEdgeInsets)contentInsetsForViewController:(id)viewController proposedContentInsets:(UIEdgeInsets)proposedContentInsets { if (self.contentInsetHandler) { @@ -63,7 +63,7 @@ - (UIEdgeInsets)contentInsetsForViewController:(HUBViewController *)viewControll return proposedContentInsets; } -- (void)scrollViewDidScrollInViewController:(HUBViewController *)viewController +- (void)scrollViewDidScrollInViewController:(id)viewController withContentOffset:(CGPoint)contentOffest { if (self.scrollingDidScrollHandler) { @@ -71,7 +71,7 @@ - (void)scrollViewDidScrollInViewController:(HUBViewController *)viewController } } -- (void)scrollingWillStartInViewController:(HUBViewController *)viewController +- (void)scrollingWillStartInViewController:(id)viewController currentContentRect:(CGRect)currentContentRect { self.startContentRect = currentContentRect; @@ -81,7 +81,7 @@ - (void)scrollingWillStartInViewController:(HUBViewController *)viewController } } -- (void)scrollingDidEndInViewController:(HUBViewController *)viewController +- (void)scrollingDidEndInViewController:(id)viewController currentContentRect:(CGRect)currentContentRect { self.endContentRect = currentContentRect; @@ -91,7 +91,7 @@ - (void)scrollingDidEndInViewController:(HUBViewController *)viewController } } -- (CGPoint)targetContentOffsetForEndedScrollInViewController:(HUBViewController *)viewController +- (CGPoint)targetContentOffsetForEndedScrollInViewController:(id)viewController velocity:(CGVector)velocity contentInset:(UIEdgeInsets)contentInset currentContentOffset:(CGPoint)currentContentOffset @@ -104,7 +104,7 @@ - (CGPoint)contentOffsetForDisplayingComponentAtIndex:(NSUInteger)componentIndex scrollPosition:(HUBScrollPosition)scrollPosition contentInset:(UIEdgeInsets)contentInset contentSize:(CGSize)contentSize - viewController:(HUBViewController *)viewController + viewController:(id)viewController { return self.targetContentOffset; }