FLEXViewControllerExplorerViewController.m 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. //
  2. // FLEXViewControllerExplorerViewController.m
  3. // Flipboard
  4. //
  5. // Created by Ryan Olson on 6/11/14.
  6. // Copyright (c) 2014 Flipboard. All rights reserved.
  7. //
  8. #import "FLEXViewControllerExplorerViewController.h"
  9. #import "FLEXRuntimeUtility.h"
  10. #import "FLEXObjectExplorerFactory.h"
  11. typedef NS_ENUM(NSUInteger, FLEXViewControllerExplorerRow) {
  12. FLEXViewControllerExplorerRowPush,
  13. FLEXViewControllerExplorerRowView
  14. };
  15. @interface FLEXViewControllerExplorerViewController ()
  16. @property (nonatomic, readonly) UIViewController *viewController;
  17. @end
  18. @implementation FLEXViewControllerExplorerViewController
  19. - (UIViewController *)viewController
  20. {
  21. return [self.object isKindOfClass:[UIViewController class]] ? self.object : nil;
  22. }
  23. - (BOOL)canPushViewController
  24. {
  25. // Only show the "Push View Controller" option if it's not already part of the hierarchy to avoid really disrupting the app.
  26. return self.viewController.view.window == nil;
  27. }
  28. #pragma mark - Superclass Overrides
  29. - (NSString *)customSectionTitle
  30. {
  31. return @"Shortcuts";
  32. }
  33. - (NSArray *)customSectionRowCookies
  34. {
  35. NSArray *rowCookies = @[@(FLEXViewControllerExplorerRowView)];
  36. if ([self canPushViewController]) {
  37. rowCookies = [@[@(FLEXViewControllerExplorerRowPush)] arrayByAddingObjectsFromArray:rowCookies];
  38. }
  39. return rowCookies;
  40. }
  41. - (NSString *)customSectionTitleForRowCookie:(id)rowCookie
  42. {
  43. NSString *title = nil;
  44. if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowPush)]) {
  45. title = @"Push View Controller";
  46. } else if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowView)]) {
  47. title = @"@property UIView *view";
  48. }
  49. return title;
  50. }
  51. - (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie
  52. {
  53. NSString *subtitle = nil;
  54. if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowView)]) {
  55. subtitle = [FLEXRuntimeUtility descriptionForIvarOrPropertyValue:self.viewController.view];
  56. }
  57. return subtitle;
  58. }
  59. - (BOOL)customSectionCanDrillIntoRowWithCookie:(id)rowCookie
  60. {
  61. BOOL canDrillIn = NO;
  62. if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowPush)]) {
  63. canDrillIn = [self canPushViewController];
  64. }else if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowView)]) {
  65. canDrillIn = self.viewController.view != nil;
  66. }
  67. return canDrillIn;
  68. }
  69. - (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie
  70. {
  71. UIViewController *drillInViewController = nil;
  72. if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowPush)]) {
  73. drillInViewController = self.viewController;
  74. } else if ([rowCookie isEqual:@(FLEXViewControllerExplorerRowView)]) {
  75. drillInViewController = [FLEXObjectExplorerFactory explorerViewControllerForObject:self.viewController.view];
  76. }
  77. return drillInViewController;
  78. }
  79. @end