react-native-navigation的迁移库

RNNStackController.m 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #import "RNNStackController.h"
  2. #import "RNNComponentViewController.h"
  3. #import "UIViewController+Utils.h"
  4. @implementation RNNStackController {
  5. UIViewController* _presentedViewController;
  6. }
  7. - (instancetype)init {
  8. self = [super init];
  9. self.delegate = self;
  10. return self;
  11. }
  12. - (void)setDefaultOptions:(RNNNavigationOptions *)defaultOptions {
  13. [super setDefaultOptions:defaultOptions];
  14. [self.presenter setDefaultOptions:defaultOptions];
  15. }
  16. - (void)viewDidLayoutSubviews {
  17. [super viewDidLayoutSubviews];
  18. [self.presenter applyOptionsOnViewDidLayoutSubviews:self.resolveOptions];
  19. }
  20. - (void)mergeChildOptions:(RNNNavigationOptions *)options child:(UIViewController *)child {
  21. if (child.isLastInStack) {
  22. [self.presenter mergeOptions:options resolvedOptions:self.resolveOptions];
  23. }
  24. [self.parentViewController mergeChildOptions:options child:child];
  25. }
  26. - (UINavigationController *)navigationController {
  27. return self;
  28. }
  29. - (UIStatusBarStyle)preferredStatusBarStyle {
  30. return [_presenter getStatusBarStyle:self.resolveOptions];
  31. }
  32. - (UIModalPresentationStyle)modalPresentationStyle {
  33. return self.getCurrentChild.modalPresentationStyle;
  34. }
  35. - (UIViewController *)popViewControllerAnimated:(BOOL)animated {
  36. [self prepareForPop];
  37. return [super popViewControllerAnimated:animated];
  38. }
  39. - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
  40. if ([self.viewControllers indexOfObject:_presentedViewController] < 0) {
  41. [self sendScreenPoppedEvent:_presentedViewController];
  42. }
  43. _presentedViewController = viewController;
  44. }
  45. - (void)sendScreenPoppedEvent:(UIViewController *)poppedScreen {
  46. [self.eventEmitter sendScreenPoppedEvent:poppedScreen.layoutInfo.componentId];
  47. }
  48. - (void)prepareForPop {
  49. if (self.viewControllers.count > 1) {
  50. UIViewController *controller = self.viewControllers[self.viewControllers.count - 2];
  51. if ([controller isKindOfClass:[RNNComponentViewController class]]) {
  52. RNNComponentViewController *rnnController = (RNNComponentViewController *)controller;
  53. [self.presenter applyOptionsBeforePopping:rnnController.resolveOptions];
  54. }
  55. }
  56. }
  57. - (UIViewController *)childViewControllerForStatusBarStyle {
  58. return self.topViewController;
  59. }
  60. @end