FLEXViewControllersViewController.m 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. @interface FLEXViewControllersViewController ()
  11. @property (nonatomic, readonly) NSArray<UIViewController *> *controllers;
  12. @end
  13. @implementation FLEXViewControllersViewController
  14. #pragma mark - Initialization
  15. + (instancetype)controllersForViews:(NSArray<UIView *> *)views {
  16. return [[self alloc] initWithViews:views];
  17. }
  18. - (id)initWithViews:(NSArray<UIView *> *)views {
  19. NSParameterAssert(views.count);
  20. self = [self init];
  21. if (self) {
  22. _controllers = [views flex_mapped:^id(UIView *view, NSUInteger idx) {
  23. return [FLEXUtility viewControllerForView:view];
  24. }];
  25. }
  26. return self;
  27. }
  28. - (id)init {
  29. return [self initWithStyle:UITableViewStylePlain];
  30. }
  31. - (void)viewDidLoad {
  32. [super viewDidLoad];
  33. self.title = @"View Controllers at Tap";
  34. [self disableToolbar];
  35. }
  36. #pragma mark - Private
  37. - (void)dismissAnimated {
  38. [self dismissViewControllerAnimated:YES completion:nil];
  39. }
  40. #pragma mark - Table View Data Source
  41. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  42. return self.controllers.count;
  43. }
  44. - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
  45. return @"View Controllers";
  46. }
  47. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  48. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kFLEXDetailCell forIndexPath:indexPath];
  49. UIViewController *controller = self.controllers[indexPath.row];
  50. cell.textLabel.text = [NSString
  51. stringWithFormat:@"%@ — %p", NSStringFromClass(controller.class), controller
  52. ];
  53. cell.detailTextLabel.text = controller.view.description;
  54. cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
  55. cell.textLabel.lineBreakMode = NSLineBreakByTruncatingTail;
  56. return cell;
  57. }
  58. #pragma mark - Table View Delegate
  59. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  60. [self.navigationController pushViewController:
  61. [FLEXObjectExplorerFactory explorerViewControllerForObject:self.controllers[indexPath.row]]
  62. animated:YES];
  63. }
  64. @end