| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- //
- // RAOrderDetailViewController.m
- // Apex And Drivers
- //
- // Created by Jack on 2018/6/2.
- // Copyright © 2018年 USAI. All rights reserved.
- //
- #import "RAOrderDetailViewController.h"
- #import "RADetailBaseModel.h"
- #import "RADetailSingleLineModel.h"
- #import "RADetailMultLineModel.h"
- #import "RADetailLocationModel.h"
- #import "RADetailActionCollectionModel.h"
- #import "RAProgressHUD.h"
- @interface RAOrderDetailSectionModel : NSObject
- @property (nonatomic,strong) NSArray <RADetailBaseModel *> *values;
- @property (nonatomic,copy) NSString *title;
- @property (nonatomic,assign) CGFloat tableWidth;
- - (NSInteger)itemCount;
- @end
- @implementation RAOrderDetailSectionModel
- - (instancetype)initWithTableViewWidth:(CGFloat)width {
- if (self = [super init]) {
- self.tableWidth = width;
- }
- return self;
- }
- - (void)setValues:(NSArray *)values {
-
- NSMutableArray *modelArr = [NSMutableArray array];
- for (int i = 0; i < values.count; i++) {
- NSDictionary *value = [values objectAtIndex:i];
- RAOrderDetailValueType type = [[value objectForKey:@"type"] intValue];
- switch (type) {
- case RAOrderDetailValueTypeSingleLine: {
- RADetailSingleLineModel *model = [[RADetailSingleLineModel alloc] init];
- model.width = self.tableWidth;
- [model setValuesForKeysWithDictionary:value];
- [modelArr addObject:model];
- }
- break;
- case RAOrderDetailValueTypeMultipleLine: {
- RADetailMultLineModel *model = [[RADetailMultLineModel alloc] init];
- model.width = self.tableWidth;
- [model setValuesForKeysWithDictionary:value];
- [modelArr addObject:model];
- }
- break;
- case RAOrderDetailValueTypeAction: {
- RADetailActionCollectionModel *model = [[RADetailActionCollectionModel alloc] init];
- model.width = self.tableWidth;
- [model setValuesForKeysWithDictionary:value];
- [modelArr addObject:model];
- }
- break;
- case RAOrderDetailValueTypeLocation: {
- RADetailLocationModel *model = [[RADetailLocationModel alloc] init];
- model.width = self.tableWidth;
- [model setValuesForKeysWithDictionary:value];
- [modelArr addObject:model];
- }
- break;
-
- default:
- break;
- }
- }
- _values = modelArr;
- }
- - (void)setValue:(id)value forUndefinedKey:(NSString *)key {
-
- }
- - (NSInteger)itemCount {
- return self.values.count;
- }
- - (RADetailBaseModel *)modelForIndex:(NSInteger)index {
- return [self.values objectAtIndex:index];
- }
- @end
- #pragma mark - View Controller
- @interface RAOrderDetailViewController ()
- @property (strong, nonatomic) IBOutlet UITableView *detailTableView;
- @property (nonatomic,strong) NSMutableArray <RAOrderDetailSectionModel *> *sectionArray;
- @property (nonatomic,strong) UIRefreshControl *refreshControl;
- @end
- @implementation RAOrderDetailViewController
- + (instancetype)viewControllerFromStoryboard {
- RAOrderDetailViewController *detailVC = [[UIStoryboard storyboardWithName:@"Detail" bundle:nil] instantiateViewControllerWithIdentifier:[self storyboardID]];
- return detailVC;
- }
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
-
- [self configureTable];
- [self loadData];
- }
- - (void)didReceiveMemoryWarning {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- - (void)configureTable {
-
- if (@available(iOS 11.0, *)) {
- self.detailTableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
- } else {
- self.automaticallyAdjustsScrollViewInsets = NO;
- }
-
- self.detailTableView.tableFooterView = [UIView new];
- self.detailTableView.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);
-
- UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
- [refresh addTarget:self action:@selector(refreshControlValueChanged:) forControlEvents:UIControlEventValueChanged];
- [self.detailTableView addSubview:refresh];
- self.refreshControl = refresh;
- }
- #pragma mark - Action
- - (void)refreshControlValueChanged:(UIRefreshControl *)refresh {
- [self loadData];
- }
- #pragma mark - Data
- - (void)loadData {
-
- // show progress
- RAProgressHUD *hud = [RAProgressHUD showHUDOnView:self.view];
-
- __weak typeof(self) weakSelf = self;
-
- dispatch_async(dispatch_get_global_queue(0, 0), ^{
-
- NSDictionary *json = [RADataProvider requestOrderDetail:self.orderID type:self.orderType type2:self.orderType2];
-
- dispatch_async(dispatch_get_main_queue(), ^{
-
- // dismiss progress
- [hud dismiss];
- if (weakSelf.refreshControl.isRefreshing) {
- [weakSelf.refreshControl endRefreshing];
- }
-
- if (weakSelf) {
- __strong typeof(weakSelf) strongSelf = weakSelf;
-
- int result = [[json objectForKey:@"result"] intValue];
- if (result == RESULT_TRUE) {
-
- NSArray *sectionArray = [json objectForKey:@"sections"];
- [strongSelf.sectionArray removeAllObjects];
- CGFloat width = CGRectGetWidth(strongSelf.detailTableView.bounds);
- for (int i = 0; i < sectionArray.count; i++) {
- NSDictionary *section = [sectionArray objectAtIndex:i];
- RAOrderDetailSectionModel *sectionModel = [[RAOrderDetailSectionModel alloc] initWithTableViewWidth:width];
- [sectionModel setValuesForKeysWithDictionary:section];
- [strongSelf.sectionArray addObject:sectionModel];
- }
-
- [strongSelf.detailTableView reloadData];
-
- } else {
- // process error
- NSString *msg = [json objectForKey:@"err_msg"];
- [strongSelf showAlertTilte:@"Warning" message:msg];
- }
- }
-
- });
-
- });
- }
- #pragma mark - Getter
- - (NSMutableArray *)sectionArray {
- if (!_sectionArray) {
- _sectionArray = [NSMutableArray array];
- }
- return _sectionArray;
- }
- - (NSInteger)sectionNumber {
- return self.sectionArray.count;
- }
- - (NSInteger)numberOfItemForSection:(NSInteger)section {
- RAOrderDetailSectionModel *model = [[self sectionArray] objectAtIndex:section];
- return [model itemCount];
- }
- - (RADetailBaseModel *)modelForIndexPath:(NSIndexPath *)indexPath {
- RAOrderDetailSectionModel *model = [[self sectionArray] objectAtIndex:indexPath.section];
- return [model modelForIndex:indexPath.row];
- }
- - (NSString *)titleForSection:(NSInteger)section {
- RAOrderDetailSectionModel *model = [[self sectionArray] objectAtIndex:section];
- return model.title;
- }
- @end
|