// // CustomTabbarController.m // Lighting // // Created by 曹云霄 on 16/4/27. // Copyright © 2016年 上海勾芒科技有限公司. All rights reserved. // #import "CustomTabbarController.h" #import "Toolview.h" #import "AppDelegate.h" #import "SceneLibraryViewController.h" #import "ProductLibraryViewController.h" #import "AboutViewController.h" #import "AllCustomerViewController.h" #import "CustomerOrderViewController.h" #import "UserViewController.h" #import "ChangePasswordViewController.h" #import "SearchViewController.h" #import "BaseViewController.h" #import "QRViewController.h" #import "ExperienceCentreViewController.h" #import "RebateViewController.h" #import "GuideIntegralViewController.h" #import "LearningCenterMainViewController.h" #import "AnnouncementViewController.h" #import "MessageViewController.h" #import "HomeViewController.h" #import "CustomWKWebViewController.h" @interface CustomTabbarController () @property (nonatomic, strong) NSArray *identifierArray; /** * 保存按钮引用 */ @property (nonatomic, strong) UIButton *Newbutton; /** * 控制器数组 */ @property (nonatomic, strong) NSMutableArray *vcArray; /** * 工具栏 */ @property (nonatomic, strong) Toolview *toolview; @end @implementation CustomTabbarController /** * UIStoryboard Identifier数组 * * @return NSArary */ - (NSArray *)identifierArray { if (_identifierArray == nil) { _identifierArray = [NSArray arrayWithObjects:@"HomeViewController", @"SearchViewController", @"ShoppingViewController", @"ClientViewController", @"RebateViewController", @"GuideIntegralViewController", @"AnnouncementViewController", @"MessageViewController", @"SceneLibraryViewController", @"ProductLibraryViewController", @"AllCustomerViewController", @"CustomerOrderViewController", @"LearningCenterMainViewController", @"AboutViewController", nil]; } return _identifierArray; } - (NSMutableArray *)vcArray { if (!_vcArray) { _vcArray = [NSMutableArray array]; } return _vcArray; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.selectedViewController beginAppearanceTransition:YES animated:animated]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self.selectedViewController endAppearanceTransition]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.selectedViewController beginAppearanceTransition:NO animated:animated]; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; [self.selectedViewController endAppearanceTransition]; } - (void)viewDidLoad { [super viewDidLoad]; [self uiConfigAction]; [self addViewcontroller]; [self addNSNotification]; } #pragma mark -UI - (void)uiConfigAction { self.tabBar.frame = CGRectMake(ZERO, ZERO, ScreenWidth, NavigationHeight); self.toolview = [[Toolview alloc] initWithFrame:CGRectMake(ZERO, ZERO, ScreenWidth, NavigationHeight)]; self.toolview.delegate = self; self.toolview.inputField.delegate = self; self.delegate = self; [self.view addSubview:self.toolview]; self.tabBar.hidden = YES; } #pragma mark -监听通知 - (void)addNSNotification { //显示体验中心 [Notification addObserver:self selector:@selector(showFollowHeart:) name:OPENFOLLOWHEARTVC object:nil]; //显示体验中心3D [Notification addObserver:self selector:@selector(show3DFollowHeart:) name:OPENFOLLOWHEART3DVC object:nil]; //显示消息界面 [Notification addObserver:self selector:@selector(showMessageController:) name:NSNOTIFICATION_MESSAGE object:nil]; //app未启动点击通知回调 NSDictionary *dict = [UserDefault objectForKey:NSNOTIFICATION_MESSAGE]; if (dict) { self.selectedIndex = 6; [Notification postNotificationName:NSNOTIFICATION_MESSAGE object:dict]; [UserDefault removeObjectForKey:NSNOTIFICATION_MESSAGE]; } } #pragma mark -显示消息界面 - (void)showMessageController:(NSNotification *)object { self.selectedIndex = 6; } #pragma mark -添加controller到viewControllers - (void)addViewcontroller { NSMutableArray *controllerArray = [NSMutableArray array]; for (int i = 0; i < self.identifierArray.count; i++) { NSString *controllString = self.identifierArray[i]; BaseViewController *control = nil; // 公告 if ([controllString isEqualToString:@"AnnouncementViewController"] || [controllString isEqualToString:@"MessageViewController"]) { control = [NSClassFromString(controllString) viewControllerWithStoryBoardType:STORYBOARD_TYPE_ANNOUNCEMENT]; } else if ([controllString isEqualToString:@"LearningCenterMainViewController"]) { // 学习中心 control = [NSClassFromString(controllString) viewControllerWithStoryBoardType:STORYBOARD_TYPE_LEARNINGCENTER]; } else if ([controllString isEqualToString:@"GuideIntegralViewController"]) { // 积分 control = [NSClassFromString(controllString) viewControllerWithStoryBoardType:STORYBOARD_TYPE_GUIDEINTERGRAL]; } else { control = [NSClassFromString(controllString) viewControllerWithStoryBoardType:STORYBOARD_TYPE_MAIN]; } UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:control]; [self.vcArray addObject:nav]; [controllerArray addObject:control]; } self.viewControllers = self.vcArray; SHARED_APPDELEGATE.allControllerArray = controllerArray; SHARED_APPDELEGATE.tabBarController = self; self.selectedIndex = 0; } #pragma mark -移除系统自带的UITabBarButton - (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; for (UIView *view in self.tabBar.subviews) { if ([view isKindOfClass:NSClassFromString(@"UITabBarButton")]) { [view removeFromSuperview]; } } } #pragma amrk - TabbarButtonClickdelegate代理 - (void)buttonClickAction:(NSInteger)Buttontag withButton:(UIButton *)button { [self.toolview.inputField resignFirstResponder]; [self dismissViewControllerAnimated:NO completion:nil]; _Newbutton = button; switch (Buttontag) { case MENU: [SHARED_APPDELEGATE.mmdrawer toggleDrawerSide:MMDrawerSideRight animated:YES completion:nil]; break; case MESSAGE: { self.selectedIndex = 7; } break; case NOTICE: { self.selectedIndex = 6; } break; case SHOPPING_GUIDE: { UserViewController *userVC = [[UserViewController alloc] init]; userVC.delegate = self; userVC.preferredContentSize = CGSizeMake(260, 230); userVC.modalPresentationStyle = UIModalPresentationPopover; UIPopoverPresentationController *pop = userVC.popoverPresentationController; pop.permittedArrowDirections = UIPopoverArrowDirectionAny; pop.sourceView = userVC.view; pop.barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; [self presentViewController:userVC animated:YES completion:nil]; } break; case CUSTOMER: self.selectedIndex = 3; break; case SHOPPING_CAR: //必须设置当前客户才能跳转到购物车 if (![Shoppersmanager manager].currentCustomer) { [XBLoadingView showHUDViewWithText:@"必须设置当前客户才能访问购物车"]; } else { self.selectedIndex = 2; } break; default: break; } } #pragma mark -修改密码点击 - (void)changPasswordButtonClick { [self dismissViewControllerAnimated:NO completion:^{ ChangePasswordViewController *changpassword = [[ChangePasswordViewController alloc] init]; changpassword.delegate = self; changpassword.preferredContentSize = CGSizeMake(260, 180); changpassword.modalPresentationStyle = UIModalPresentationPopover; UIPopoverPresentationController *pop = changpassword.popoverPresentationController; pop.permittedArrowDirections = UIPopoverArrowDirectionAny; pop.sourceView = changpassword.view; pop.barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:_Newbutton]; [self presentViewController:changpassword animated:YES completion:nil]; }]; } #pragma mark -取消按钮 - (void)cancelButtonClick { [self dismissViewControllerAnimated:NO completion:^{ UserViewController *userVC = [[UserViewController alloc] init]; userVC.delegate = self; userVC.preferredContentSize = CGSizeMake(260, 230); userVC.modalPresentationStyle = UIModalPresentationPopover; UIPopoverPresentationController *pop = userVC.popoverPresentationController; pop.permittedArrowDirections = UIPopoverArrowDirectionAny; pop.sourceView = userVC.view; pop.barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:_Newbutton]; [self presentViewController:userVC animated:YES completion:nil]; }]; } #pragma mark -二维码扫描 - (void)qrcodeButtonClick { WS(weakSelf); // 判断应用是否有使用相机的权限 if ([BaseViewController determineCameraPermissions]) { QRViewController *qrVC = [[QRViewController alloc] initWithScanCompleteHandler:^(NSString *url) { [weakSelf dismissViewControllerAnimated:YES completion:^{ ProductLibraryViewController *product = [SHARED_APPDELEGATE.allControllerArray objectAtIndex_opple:8]; product.barcode = url; SHARED_APPDELEGATE.lineView.hidden = YES; weakSelf.selectedIndex = 8; }]; }]; dispatch_async(dispatch_get_main_queue(), ^{ [weakSelf presentViewController:qrVC animated:YES completion:nil]; }); } } #pragma mark -搜索框代理方法 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { self.selectedIndex = 1; return YES; } #pragma mark -Search按钮 - (BOOL)textFieldShouldReturn:(UITextField *)textField { if (![BaseViewController isBlankString:textField.text]) { [textField resignFirstResponder]; [Notification postNotificationName:SEARCHSTRING object:textField.text]; } return YES; } #pragma mark -自定义选中 - (void)setSelectedIndex:(NSUInteger)selectedIndex { [super setSelectedIndex:selectedIndex]; [self didSelectNavigationController:[SHARED_APPDELEGATE.allControllerArray objectAtIndex_opple:selectedIndex]]; } #pragma mark -返回根视图控制器 - (void)didSelectNavigationController:(UIViewController *)viewController { if ([[viewController.navigationController.viewControllers firstObject] isKindOfClass:NSClassFromString(@"UIMoreListController")]) { [viewController.navigationController popToViewController:viewController.navigationController.viewControllers[1] animated:YES]; } else { [viewController.navigationController popToRootViewControllerAnimated:YES]; } } #pragma mark - 切换tabbar selectedIndex - (void)switchSelectedIndex:(NSInteger)selectedIndex { [self.toolview switchLineViewOrigin:selectedIndex - 100]; } #pragma mark -推出体验中心控制器 - (void)showFollowHeart:(NSNotification *)objc { ExperienceCentreViewController *ExperienceCenter = [ExperienceCentreViewController viewControllerWithStoryBoardType:STORYBOARD_TYPE_MAIN]; ExperienceCenter.modalPresentationStyle = UIModalPresentationOverFullScreen; UIPopoverPresentationController *popover = ExperienceCenter.popoverPresentationController; popover.sourceView = ExperienceCenter.view; [self presentViewController:ExperienceCenter animated:YES completion:nil]; } #pragma mark -推出3D体验中心控制器 - (void)show3DFollowHeart:(NSNotification *)objc { TOConsumerEntity *user = [Customermanager manager].model.consumer; if (user == nil) { ShowAlertView(@"提示", @"请先指定当前客户", @[@"我知道了"], UIAlertControllerStyleAlert, nil); return; } LoginResult *shopper = [Shoppersmanager manager].shoppers; CustomWKWebViewController *webView = [[CustomWKWebViewController alloc] init]; webView.type = Announcement; webView.urlString = [NSString stringWithFormat:BAJIE3D,user.fid,shopper.employee.departid,shopper.employee.fid]; [self presentViewController:webView animated:YES completion:nil]; } @end