react-native-navigation的迁移库

RNNTabBarController.m 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #import "RNNTabBarController.h"
  2. #define kTabBarHiddenDuration 0.3
  3. @implementation RNNTabBarController {
  4. NSUInteger _currentTabIndex;
  5. RNNEventEmitter *_eventEmitter;
  6. }
  7. - (instancetype)initWithLayoutInfo:(RNNLayoutInfo *)layoutInfo
  8. childViewControllers:(NSArray *)childViewControllers
  9. options:(RNNNavigationOptions *)options
  10. presenter:(RNNBasePresenter *)presenter
  11. eventEmitter:(RNNEventEmitter *)eventEmitter {
  12. self = [self initWithLayoutInfo:layoutInfo childViewControllers:childViewControllers options:options presenter:presenter];
  13. _eventEmitter = eventEmitter;
  14. return self;
  15. }
  16. - (instancetype)initWithLayoutInfo:(RNNLayoutInfo *)layoutInfo
  17. childViewControllers:(NSArray *)childViewControllers
  18. options:(RNNNavigationOptions *)options
  19. presenter:(RNNBasePresenter *)presenter {
  20. self = [super init];
  21. self.presenter = presenter;
  22. self.options = options;
  23. self.layoutInfo = layoutInfo;
  24. [self setViewControllers:childViewControllers];
  25. return self;
  26. }
  27. - (instancetype)initWithEventEmitter:(id)eventEmitter {
  28. self = [super init];
  29. _eventEmitter = eventEmitter;
  30. self.delegate = self;
  31. return self;
  32. }
  33. - (UIInterfaceOrientationMask)supportedInterfaceOrientations {
  34. return self.selectedViewController.supportedInterfaceOrientations;
  35. }
  36. - (void)setSelectedIndexByComponentID:(NSString *)componentID {
  37. for (id child in self.childViewControllers) {
  38. UIViewController<RNNParentProtocol>* vc = child;
  39. if ([vc.layoutInfo.componentId isEqualToString:componentID]) {
  40. [self setSelectedIndex:[self.childViewControllers indexOfObject:child]];
  41. }
  42. }
  43. }
  44. - (void)setSelectedIndex:(NSUInteger)selectedIndex {
  45. _currentTabIndex = selectedIndex;
  46. [super setSelectedIndex:selectedIndex];
  47. }
  48. - (UIViewController *)getLeafViewController {
  49. return ((UIViewController<RNNParentProtocol>*)self.selectedViewController).getLeafViewController;
  50. }
  51. - (UIStatusBarStyle)preferredStatusBarStyle {
  52. return ((UIViewController<RNNParentProtocol>*)self.selectedViewController).preferredStatusBarStyle;
  53. }
  54. - (void)willMoveToParentViewController:(UIViewController *)parent {
  55. [_presenter present:self.options onViewControllerDidLoad:self];
  56. }
  57. #pragma mark UITabBarControllerDelegate
  58. - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
  59. [_eventEmitter sendBottomTabSelected:@(tabBarController.selectedIndex) unselected:@(_currentTabIndex)];
  60. _currentTabIndex = tabBarController.selectedIndex;
  61. }
  62. @end