FLEXViewControllersViewController.m 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //
  2. // FLEXViewControllersViewController.m
  3. // FLEX
  4. //
  5. // Created by Tanner Bennett on 2/13/20.
  6. // Copyright © 2020 Flipboard. All rights reserved.
  7. //
  8. #import "FLEXViewControllersViewController.h"
  9. #import "FLEXObjectExplorerFactory.h"
  10. #import "FLEXMutableListSection.h"
  11. @interface FLEXViewControllersViewController ()
  12. @property (nonatomic, readonly) FLEXMutableListSection *section;
  13. @property (nonatomic, readonly) NSArray<UIViewController *> *controllers;
  14. @end
  15. @implementation FLEXViewControllersViewController
  16. @dynamic sections, allSections;
  17. #pragma mark - Initialization
  18. + (instancetype)controllersForViews:(NSArray<UIView *> *)views {
  19. return [[self alloc] initWithViews:views];
  20. }
  21. - (id)initWithViews:(NSArray<UIView *> *)views {
  22. NSParameterAssert(views.count);
  23. self = [self initWithStyle:UITableViewStylePlain];
  24. if (self) {
  25. _controllers = [views flex_mapped:^id(UIView *view, NSUInteger idx) {
  26. return [FLEXUtility viewControllerForView:view];
  27. }];
  28. }
  29. return self;
  30. }
  31. - (void)viewDidLoad {
  32. [super viewDidLoad];
  33. self.title = @"View Controllers at Tap";
  34. [self disableToolbar];
  35. }
  36. - (NSArray<FLEXTableViewSection *> *)makeSections {
  37. _section = [FLEXMutableListSection list:self.controllers
  38. cellConfiguration:^(UITableViewCell *cell, UIViewController *controller, NSInteger row) {
  39. cell.textLabel.text = [NSString
  40. stringWithFormat:@"%@ — %p", NSStringFromClass(controller.class), controller
  41. ];
  42. cell.detailTextLabel.text = controller.view.description;
  43. cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
  44. cell.textLabel.lineBreakMode = NSLineBreakByTruncatingTail;
  45. } filterMatcher:^BOOL(NSString *filterText, UIViewController *controller) {
  46. return [NSStringFromClass(controller.class) localizedCaseInsensitiveContainsString:filterText];
  47. }];
  48. self.section.selectionHandler = ^(UIViewController *host, UIViewController *controller) {
  49. [host.navigationController pushViewController:
  50. [FLEXObjectExplorerFactory explorerViewControllerForObject:controller]
  51. animated:YES];
  52. };
  53. self.section.customTitle = @"View Controllers";
  54. return @[self.section];
  55. }
  56. #pragma mark - Private
  57. - (void)dismissAnimated {
  58. [self dismissViewControllerAnimated:YES completion:nil];
  59. }
  60. @end