FLEXTableView.m 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //
  2. // FLEXTableView.m
  3. // FLEX
  4. //
  5. // Created by Tanner on 4/17/19.
  6. // Copyright © 2019 Flipboard. All rights reserved.
  7. //
  8. #import "FLEXTableView.h"
  9. #import "FLEXUtility.h"
  10. #import "FLEXSubtitleTableViewCell.h"
  11. #import "FLEXMultilineTableViewCell.h"
  12. #import "FLEXKeyValueTableViewCell.h"
  13. #import "FLEXCodeFontCell.h"
  14. FLEXTableViewCellReuseIdentifier const kFLEXDefaultCell = @"kFLEXDefaultCell";
  15. FLEXTableViewCellReuseIdentifier const kFLEXDetailCell = @"kFLEXDetailCell";
  16. FLEXTableViewCellReuseIdentifier const kFLEXMultilineCell = @"kFLEXMultilineCell";
  17. FLEXTableViewCellReuseIdentifier const kFLEXMultilineDetailCell = @"kFLEXMultilineDetailCell";
  18. FLEXTableViewCellReuseIdentifier const kFLEXKeyValueCell = @"kFLEXKeyValueCell";
  19. FLEXTableViewCellReuseIdentifier const kFLEXCodeFontCell = @"kFLEXCodeFontCell";
  20. #pragma mark Private
  21. @interface UITableView (Private)
  22. - (CGFloat)_heightForHeaderInSection:(NSInteger)section;
  23. - (NSString *)_titleForHeaderInSection:(NSInteger)section;
  24. @end
  25. @implementation FLEXTableView
  26. + (instancetype)flexDefaultTableView {
  27. #if FLEX_AT_LEAST_IOS13_SDK
  28. if (@available(iOS 13.0, *)) {
  29. return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleInsetGrouped];
  30. } else {
  31. return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
  32. }
  33. #else
  34. return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
  35. #endif
  36. }
  37. #pragma mark - Initialization
  38. + (id)groupedTableView {
  39. #if FLEX_AT_LEAST_IOS13_SDK
  40. if (@available(iOS 13.0, *)) {
  41. return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleInsetGrouped];
  42. } else {
  43. return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
  44. }
  45. #else
  46. return [[self alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
  47. #endif
  48. }
  49. + (id)plainTableView {
  50. return [[self alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
  51. }
  52. + (id)style:(UITableViewStyle)style {
  53. return [[self alloc] initWithFrame:CGRectZero style:style];
  54. }
  55. - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style {
  56. self = [super initWithFrame:frame style:style];
  57. if (self) {
  58. [self registerCells:@{
  59. kFLEXDefaultCell : [FLEXTableViewCell class],
  60. kFLEXDetailCell : [FLEXSubtitleTableViewCell class],
  61. kFLEXMultilineCell : [FLEXMultilineTableViewCell class],
  62. kFLEXMultilineDetailCell : [FLEXMultilineDetailTableViewCell class],
  63. kFLEXKeyValueCell : [FLEXKeyValueTableViewCell class],
  64. kFLEXCodeFontCell : [FLEXCodeFontCell class],
  65. }];
  66. }
  67. return self;
  68. }
  69. #pragma mark - Public
  70. - (void)registerCells:(NSDictionary<NSString*, Class> *)registrationMapping {
  71. [registrationMapping enumerateKeysAndObjectsUsingBlock:^(NSString *identifier, Class cellClass, BOOL *stop) {
  72. [self registerClass:cellClass forCellReuseIdentifier:identifier];
  73. }];
  74. }
  75. @end