#import "RNNSideMenuChildVC.h" @interface RNNSideMenuChildVC () @property (readwrite) RNNSideMenuChildType type; @property (nonatomic, retain) UIViewController *child; @end @implementation RNNSideMenuChildVC - (instancetype)initWithLayoutInfo:(RNNLayoutInfo *)layoutInfo childViewControllers:(NSArray *)childViewControllers options:(RNNNavigationOptions *)options defaultOptions:(RNNNavigationOptions *)defaultOptions presenter:(RNNViewControllerPresenter *)presenter type:(RNNSideMenuChildType)type { self = [self initWithLayoutInfo:layoutInfo childViewControllers:childViewControllers options:options defaultOptions:defaultOptions presenter:presenter]; self.type = type; return self; } - (instancetype)initWithLayoutInfo:(RNNLayoutInfo *)layoutInfo childViewControllers:(NSArray *)childViewControllers options:(RNNNavigationOptions *)options defaultOptions:(RNNNavigationOptions *)defaultOptions presenter:(RNNViewControllerPresenter *)presenter { self = [super init]; self.child = childViewControllers[0]; self.presenter = presenter; [self.presenter bindViewController:self]; self.defaultOptions = defaultOptions; self.options = options; self.layoutInfo = layoutInfo; [self bindChildViewController:self.child]; return self; } - (void)onChildWillAppear { [_presenter applyOptions:self.resolveOptions]; [((UIViewController *)self.parentViewController) onChildWillAppear]; } - (RNNNavigationOptions *)resolveOptions { return [(RNNNavigationOptions *)[self.getCurrentChild.resolveOptions.copy mergeOptions:self.options] withDefault:self.defaultOptions]; } - (void)mergeOptions:(RNNNavigationOptions *)options { [_presenter mergeOptions:options currentOptions:self.options defaultOptions:self.defaultOptions]; [((UIViewController *)self.parentViewController) mergeOptions:options]; } - (void)overrideOptions:(RNNNavigationOptions *)options { [self.options overrideOptions:options]; } - (void)bindChildViewController:(UIViewController*)child { self.child = child; [self addChildViewController:self.child]; [self.child.view setFrame:self.view.bounds]; [self.view addSubview:self.child.view]; [self.view bringSubviewToFront:self.child.view]; } - (void)setWidth:(CGFloat)width { CGRect frame = self.child.view.frame; frame.size.width = width; self.child.view.frame = frame; } - (UIViewController *)getCurrentChild { return self.child; } - (UIViewController *)getCurrentLeaf { return [[self getCurrentChild] getCurrentLeaf]; } - (UIStatusBarStyle)preferredStatusBarStyle { return self.child.preferredStatusBarStyle; } @end