RAOrderEditViewController+TableDataSource.m 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. //
  2. // RAOrderEditViewController+TableDataSource.m
  3. // Apex And Drivers
  4. //
  5. // Created by Jack on 2018/6/4.
  6. // Copyright © 2018年 USAI. All rights reserved.
  7. //
  8. #import "RAOrderEditViewController+TableDataSource.h"
  9. #import "RAEditLabelCell.h"
  10. #import "RAEditInputModel.h"
  11. #import "RAEditMultInputModel.h"
  12. #import "RAEditLabelModel.h"
  13. #import "RAEditPhotoModel.h"
  14. #import "RAEditSignatureModel.h"
  15. #import "RAEditDateModel.h"
  16. #import "RAQRCodeScannerViewController.h"
  17. #import "RACameraViewController.h"
  18. #import "RAPhotoPreviewController.h"
  19. #import "SignatureViewController.h"
  20. #import "UIImage+RedAnt.h"
  21. #import "RADatePickerViewController.h"
  22. @implementation RAOrderEditViewController (TableDataSource)
  23. - (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
  24. RAEditBaseModel *model = [self modelForIndexPath:indexPath];
  25. switch (model.type) {
  26. case RAEditTypeLabel: {
  27. RAEditLabelCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RAEditLabelCell" forIndexPath:indexPath];
  28. RAEditLabelModel *labelModel = (RAEditLabelModel *)model;
  29. cell.model = labelModel;
  30. return cell;
  31. }
  32. break;
  33. case RAEditTypeInput: {
  34. RAEditScanInputCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RAEditScanInputCell" forIndexPath:indexPath];
  35. RAEditInputModel *inputModel = (RAEditInputModel *)model;
  36. cell.model = inputModel;
  37. cell.delegate = self;
  38. return cell;
  39. }
  40. break;
  41. case RAEditTypeMultInput: {
  42. RAEditMultInputCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RAEditMultInputCell" forIndexPath:indexPath];
  43. RAEditMultInputModel *multInputModel = (RAEditMultInputModel *)model;
  44. cell.model = multInputModel;
  45. cell.delegate = self;
  46. return cell;
  47. }
  48. break;
  49. case RAEditTypePhoto: {
  50. RAEditPhotoCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RAEditPhotoCell" forIndexPath:indexPath];
  51. RAEditPhotoModel *photoModel = (RAEditPhotoModel *)model;
  52. cell.model = photoModel;
  53. cell.delegate = self;
  54. return cell;
  55. }
  56. break;
  57. case RAEditTypeSignature: {
  58. RAEditSignatureModel *signatureModel = (RAEditSignatureModel *)model;
  59. RAEditSignatureCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RAEditSignatureCell" forIndexPath:indexPath];
  60. cell.model = signatureModel;
  61. cell.delegate = self;
  62. return cell;
  63. }
  64. break;
  65. case RAEditTypeDate: {
  66. RAEditDateModel *dateModel = (RAEditDateModel *)model;
  67. RAEditDateCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RAEditDateCell" forIndexPath:indexPath];
  68. cell.model = dateModel;
  69. cell.delegate = self;
  70. return cell;
  71. }
  72. break;
  73. default:
  74. break;
  75. }
  76. UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"detaulCell"];
  77. return cell;
  78. }
  79. - (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  80. return [self itemCountForSection:section];
  81. }
  82. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  83. return [self editSectionCount];
  84. }
  85. #pragma mark - PhotoCell Delegate
  86. - (void)photoCellWillOpenCameraOrShowPhoto:(RAEditPhotoCell *)cell {
  87. if (cell.model.photo) {
  88. RAPhotoPreviewController *previewVC = [RAPhotoPreviewController viewControllerFromStoryboard];
  89. previewVC.image = cell.model.photo;
  90. previewVC.completion = ^{
  91. cell.model.photo = nil;
  92. };
  93. [self.navigationController pushViewController:previewVC animated:YES];
  94. } else {
  95. RACameraViewController *cameraVC = [RACameraViewController viewControllerFromStoryboard];
  96. cameraVC.completion = ^(UIImage *image) {
  97. cell.model.photo = [UIImage img_compress:image kbsize:1024];
  98. };
  99. cameraVC.fromVC = self;
  100. [self.navigationController pushViewController:cameraVC animated:YES];
  101. }
  102. }
  103. #pragma mark - Input Delegate
  104. - (void)scanInputCell:(RAEditScanInputCell *)cell clickScanButton:(UIButton *)sender {
  105. RAQRCodeScannerViewController *scanVC = [RAQRCodeScannerViewController viewControllerFromStoryboard];
  106. scanVC.completion = ^(NSString *value) {
  107. cell.model.value = value;
  108. };
  109. [self.navigationController pushViewController:scanVC animated:YES];
  110. }
  111. - (void)beginEditInputCell:(RAEditScanInputCell *)cell {
  112. self.editingIndexPath = [self indexPathForCell:cell];
  113. }
  114. - (void)endEditInputCell:(RAEditScanInputCell *)cell {
  115. self.editingIndexPath = nil;
  116. }
  117. #pragma mark - MultInput Delegate
  118. - (void)beginEditMultInputCell:(RAEditMultInputCell *)cell {
  119. self.editingIndexPath = [self indexPathForCell:cell];
  120. }
  121. - (void)endEditMultInputCell:(RAEditMultInputCell *)cell {
  122. self.editingIndexPath = nil;
  123. }
  124. #pragma mark - Signature Delegate
  125. - (void)signatureCell:(RAEditSignatureCell *)cell tapSignature:(RAEditSignatureModel *)model {
  126. if (model) {
  127. SignatureViewController * vc =[ [UIStoryboard storyboardWithName:@"signature"
  128. bundle:[NSBundle mainBundle]]
  129. instantiateViewControllerWithIdentifier:@"SignatureViewController"];
  130. vc.onReturnImg = ^(UIImage* img)
  131. {
  132. if(img!=nil) {
  133. model.signature = img;
  134. if (model.expand) {
  135. if ([model.expand isKindOfClass:[NSDictionary class]]) {
  136. NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
  137. [self expandIndexPath:indexPath withJsonItem:model.expand];
  138. } else if ([model.expand isKindOfClass:[RAEditBaseModel class]]) {
  139. if (((RAEditBaseModel *)model.expand).autofill) {
  140. [((RAEditBaseModel *)model.expand) updateDefaultValue];
  141. }
  142. }
  143. }
  144. }
  145. };
  146. [self.navigationController pushViewController:vc animated:NO];
  147. }
  148. }
  149. #pragma mark - DateCellDelegate
  150. - (void)dateCell:(RAEditDateCell *)cell didClickForModel:(RAEditDateModel *)model {
  151. if (model) {
  152. UIDatePickerMode mode = UIDatePickerModeDate;
  153. switch (model.mode) {
  154. case RAEditTypeModeTime: {
  155. mode = UIDatePickerModeTime;
  156. }
  157. break;
  158. case RAEditTypeModeDate: {
  159. mode = UIDatePickerModeDate;
  160. }
  161. break;
  162. case RAEditTypeModeDateAndTime: {
  163. mode = UIDatePickerModeDateAndTime;
  164. }
  165. break;
  166. default:
  167. break;
  168. }
  169. [RADatePickerViewController presentDatePicker:self title:model.title dateMode:mode withSetBlk:^(NSDate *date) {
  170. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  171. formatter.timeZone = [NSTimeZone localTimeZone];
  172. formatter.dateFormat = model.format;
  173. NSString *dateStr = [formatter stringFromDate:date];
  174. model.value = dateStr;
  175. }];
  176. }
  177. }
  178. @end