// // FKCouponController.m // FirstLink // // Created by ascii on 15/6/19. // Copyright (c) 2015年 FirstLink. All rights reserved. // #import "FKCouponController.h" #import "FKCouponViewModel.h" #import "FKCouponExchangeCell.h" #import "FKCouponTableViewCell.h" #import "FKAcitivityCardCell.h" #import "FKCashCouponRequest.h" #import "FKCashCouponReform.h" #import "WebViewController.h" #import "FKExchangeCouponController.h" #import "FKCouponItem.h" #import "SchemaManager.h" #import "FLControllerHelper.h" @interface FKCouponController () @property (nonatomic, strong) FKCouponViewModel *viewModel; @end static NSString * const FKCouponTableViewCellIdentifier = @"FKCouponTableViewCellIdentifier"; static NSString * const FKCouponExchangeCellIdentifier = @"FKCouponExchangeCellIdentifier"; static NSString * const FKAcitivityCardCellIdentifier = @"FKAcitivityCardCellIdentifier"; @implementation FKCouponController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. self.view.backgroundColor = UIColorFromRGB(0xf4f4f4); [self configTableView]; [self configRightNavItem]; [self.hudView show:YES]; [self requestNewData]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationItem.title = @"我的优惠"; [[self navigationController] setNavigationBarHidden:NO animated:YES]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if (self.viewModel.refreshWhenDidAppear) { [self requestNewData]; } } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ #pragma mark - Request - (void)requestNewData { [FKCashCouponRequest requestItems:REQUEST_CASHCOUPON_LIST startRow:[FLStringHelper convertNumberToString:0] pageSize:[FLStringHelper convertNumberToString:PAGE_RECORD_COUNT] deleagate:self]; } - (void)refreshControl:(FKRefreshControl *)refreshControl didEngageRefreshDirection:(RefreshDirection)direction { if (direction==RefreshDirectionTop) { self.refreshControl.bottomEnabled = YES; [self requestNewData]; } else if (direction==RefreshDirectionBottom) { [FKCashCouponRequest requestItems:REQUEST_CASHCOUPON_NEXT_PAGE startRow:[FLStringHelper convertNumberToString:(int)(self.viewModel.couponArray.count)] pageSize:[FLStringHelper convertNumberToString:PAGE_RECORD_COUNT] deleagate:self]; } } #pragma mark - Response - (void)networkDidSuccessResponse:(NSDictionary *)response identify:(int)identify header:(MSGHeader *)header { [self.hudView hide:YES]; [self finishLoadingData]; if ([header.code intValue] == RESPONSE_MSG_NORMAL) { if (identify == REQUEST_CASHCOUPON_LIST) { self.viewModel.totalCount = [FKCashCouponReform parseTotalCount:response]; self.viewModel.serveTime = [FKCashCouponReform parseServerTime:response]; self.viewModel.couponArray = [FKCashCouponReform parseCouponItems:response]; [self.viewModel setUserMarkOfAllItemValid]; } else if (identify == REQUEST_CASHCOUPON_NEXT_PAGE) { NSArray *array = [FKCashCouponReform parseCouponItems:response]; [self.viewModel.couponArray addObjectsFromArray:array]; [self.viewModel setUserMarkOfAllItemValid]; self.refreshControl.bottomEnabled = (array.count > 0); } [self.tableView reloadData]; } else { [FLProgressHUDHelper showText:header.msg inView:self.view]; } } - (void)networkDidReceiveError:(NSError *)error identify:(int)identify header:(MSGHeader *)header { [self.hudView hide:YES]; [self finishLoadingData]; [FLProgressHUDHelper showText:header.msg inView:self.view]; } #pragma mark - Table View Delegate - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { switch (section) { case 0: { return 10; break; } case 1: { return 15; break; } default: break; } return CGFLOAT_MIN; } - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { return CGFLOAT_MIN; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { switch (indexPath.section) { case 0: { return [FKCouponExchangeCell height]; break; } case 1: { FKCouponItem *item = [self.viewModel itemAtIndexPath:indexPath]; if ([item getCouponType] == FKCouponTypeAcitivityCard) { return [FKAcitivityCardCell heightWithCouponItem:item]; } else { return [FKCouponTableViewCell height]; } break; } default: break; } return CGFLOAT_MIN; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [self.viewModel numberOfSectionsInTableView]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [self.viewModel numberOfRowsInSection:section]; } - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell; if (indexPath.section == 0) { FKCouponExchangeCell *exchangeCell = [tableView dequeueReusableCellWithIdentifier:FKCouponExchangeCellIdentifier]; cell = exchangeCell; } else { FKCouponItem* item = [self.viewModel itemAtIndexPath:indexPath]; if ([item getCouponType] == FKCouponTypeAcitivityCard) { FKAcitivityCardCell *acitivityCell = [tableView dequeueReusableCellWithIdentifier:FKAcitivityCardCellIdentifier]; [acitivityCell configCellWith:item serveTime:self.viewModel.serveTime]; cell = acitivityCell; } else { FKCouponTableViewCell *couponCell = [tableView dequeueReusableCellWithIdentifier:FKCouponTableViewCellIdentifier]; [couponCell configCellWith:item serveTime:self.viewModel.serveTime]; cell = couponCell; } } cell.selectionStyle = UITableViewCellSelectionStyleNone; if (cell == nil) { cell = [[UITableViewCell alloc] init]; } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == 0) { FKExchangeCouponController *controller = [[FKExchangeCouponController alloc] init]; controller.exchangeSuccessCallBack = ^(FKCouponItem *item){ self.viewModel.refreshWhenDidAppear = NO; if (item) { [self.viewModel.couponArray insertObject:item atIndex:0]; [self.tableView reloadData]; } }; controller.hidesBottomBarWhenPushed = YES; [self.navigationController pushViewController:controller animated:YES]; }else{ NSString *url = [self.viewModel validTargetUrlForIndexpath:indexPath]; if (url) { [self parseURLSchema:url]; } } } #pragma mark - Action - (IBAction)clickRightNavItem:(id)sender { NSString *urlString = [NSString stringWithFormat:@"%@/support/about-coupon.html", [[FKServerUtil sharedInstance] webServer]]; WebViewController *newViewController = [[WebViewController alloc] init]; newViewController.url = urlString; newViewController.hidesBottomBarWhenPushed = YES; [self.navigationController pushViewController:newViewController animated:YES]; } #pragma mark - Method - (void)parseURLSchema:(NSString *)urlString { if (urlString.length > 0) { NSURL *url = [NSURL URLWithString:urlString]; if ([url.scheme rangeOfString:@"HTTP" options:NSCaseInsensitiveSearch].length > 0) { [self pushWebViewController:urlString]; } else { [[SchemaManager sharedManager] parserURL:url shouldCache:NO]; } } } - (void)pushWebViewController:(NSString *)urlString { WebViewController *newViewController = [[FLControllerHelper currentStoryBoard] instantiateViewControllerWithIdentifier:@"WebViewController"]; newViewController.url = urlString; newViewController.hidesBottomBarWhenPushed = YES; [self pushController:newViewController]; } - (void)pushController:(UIViewController *)controller{ if ([FLControllerHelper currentController].navigationController && controller) { [[FLControllerHelper currentController].navigationController pushViewController:controller animated:YES]; } } - (void)configTableView { self.tableView.backgroundColor = UIColorFromRGB(0xf4f4f4); [self initRefreshControlWithTableView:self.tableView]; if (@available(iOS 11.0, *)) { self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; } [self.tableView registerClass:[FKCouponExchangeCell class] forCellReuseIdentifier:FKCouponExchangeCellIdentifier]; [self.tableView registerClass:[FKCouponTableViewCell class] forCellReuseIdentifier:FKCouponTableViewCellIdentifier]; [self.tableView registerClass:[FKAcitivityCardCell class] forCellReuseIdentifier:FKAcitivityCardCellIdentifier]; } - (void)configRightNavItem { UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setImage:[UIImage imageNamed:@""] forState:UIControlStateNormal]; [button setFrame:CGRectMake(0, 0, 80, 50)]; [button addTarget:self action:@selector(clickRightNavItem:) forControlEvents:UIControlEventTouchUpInside]; [button.titleLabel setFont:[UIFont systemFontOfSize:15]]; [button setTitle:@"我要券" forState:UIControlStateNormal]; [button setTitleColor:UIColorFromRGB(0xff6362) forState:UIControlStateNormal]; button.imageEdgeInsets = UIEdgeInsetsMake(1, -6, 0, 0); button.transform = CGAffineTransformMakeScale(-1.0, 1.0); button.titleLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0); button.imageView.transform = CGAffineTransformMakeScale(-1.0, 1.0); [button setImage:[UIImage imageNamed:@"CouponQuestionIcon"] forState:UIControlStateNormal]; [button setImage:[UIImage imageNamed:@"CouponQuestionIcon"] forState:UIControlStateHighlighted]; UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initWithCustomView:button]; UIBarButtonItem *spaceBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; spaceBarButtonItem.width = -14; self.navigationItem.rightBarButtonItems = @[spaceBarButtonItem, rightItem]; } #pragma mark - Property - (FKCouponViewModel*)viewModel { if (!_viewModel) { _viewModel = [[FKCouponViewModel alloc] init]; } return _viewModel; } @end