react-native-navigation的迁移库

RNNBackButtonOptions.m 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #import "RNNBackButtonOptions.h"
  2. #import "UIImage+tint.h"
  3. @implementation RNNBackButtonOptions
  4. - (void)applyOn:(UIViewController *)viewController {
  5. if (self.visible) {
  6. viewController.navigationItem.hidesBackButton = ![self.visible boolValue];
  7. }
  8. [self applyOnNavigationController:viewController.navigationController];
  9. }
  10. - (void)applyOnNavigationController:(UINavigationController *)navigationController {
  11. if (self.showTitle && ![self.showTitle boolValue]) {
  12. self.title = @"";
  13. }
  14. if (self.icon) {
  15. UIImage *image = self.tintedIcon;
  16. [navigationController.navigationBar setBackIndicatorImage:[UIImage new]];
  17. [navigationController.navigationBar setBackIndicatorTransitionMaskImage:[UIImage new]];
  18. UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:nil action:nil];
  19. [self setBackItem:backItem onNavigationController:navigationController];
  20. } else if (self.title) {
  21. UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:self.title
  22. style:UIBarButtonItemStylePlain
  23. target:nil
  24. action:nil];
  25. [self setBackItem:backItem onNavigationController:navigationController];
  26. }
  27. }
  28. - (void)setBackItem:(UIBarButtonItem *)backItem onNavigationController:(UINavigationController *)navigationController {
  29. if (navigationController.viewControllers.count >= 2) {
  30. UIViewController* lastViewControllerInStack = navigationController.viewControllers[navigationController.viewControllers.count - 2];
  31. lastViewControllerInStack.navigationItem.backBarButtonItem = backItem;
  32. }
  33. }
  34. - (UIImage *)tintedIcon {
  35. UIImage *image = self.icon ? [RCTConvert UIImage:self.icon] : nil;
  36. if (self.color) {
  37. return [[image withTintColor:[RCTConvert UIColor:self.color]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
  38. }
  39. return image;
  40. }
  41. @end