VTMagic的使用

//

 

VTMagic的使用

 

 

//  CFOrderViewController.m

//  qifuyuniOS

////

/**

 *  @author 李洪强, 16-08-30 10:08:50

 *

 *  原生开发

 */

 

 

#import "CFOrderViewController.h"

#import "ZZChatViewController.h"

#import "CFCommodityController.h"

#import "WXApi.h"

#import "AppDelegate.h"

 

#import "VTMagic.h"

//待支付

#import "CFtobePaidTableCtrl.h"

//代发货

#import "CFtoBeShippedTableCtrl.h"

//待收货

#import "CFreceiptOfGoodsTabelCtrl.h"

//我的订单

#import "CFmyOrderTabelCtrl.h"

 

//

 

@interface CFOrderViewController ()<UIAlertViewDelegate,UIScrollViewDelegate,VTMagicViewDataSource,VTMagicViewDelegate>

@property(nonatomic,retainVTMagicController  *magicController;

//******************************************

/**

 *  @author 李洪强, 16-08-30 10:08:50

 *

 *  原生开发

 */

 

 

/** 横线View1 */

@property (weaknonatomicIBOutlet UIView *orangeView1;

/** 横线View2 */

@property (weaknonatomicIBOutlet UIView *orangeView2;

/** 横线View3 */

@property (weaknonatomicIBOutlet UIView *orangeView3;

/** 横线View4 */

@property (weaknonatomicIBOutlet UIView *orangeView4;

 

/** 存放顶部所有标题的View */

//@property (weak, nonatomic) IBOutlet UIView *titlesView;

 

/** 存放所有内容的scrollView */

@property (weaknonatomicIBOutlet UIScrollView *contentsScrollView;

 

/** 待支付*/

//To be paid

@property (weaknonatomicIBOutlet UIButton *tobePaidBtn;

 

/** 待发货*/

//toBeShipped

@property (weaknonatomicIBOutlet UIButton *toBeShippedBtn;

 

/** 待收货*/

//receiptOfGoods

@property (weaknonatomicIBOutlet UIButton *receiptOfGoodsBtn;

 

 

/**我的订单*/

//myOrder

@property (weaknonatomicIBOutlet UIButton *myOrderBtn;

 

 

/** 标签栏底部的红色指示器 */

@property (nonatomicweakUIView *indicatorView;

/** 当前选中的按钮 */

@property (nonatomicweakUIButton *selectedButton;

 

/** 顶部的按钮 */

@property (nonatomicweakUIButton *Button1;

/** 顶部的所有标签 */

@property (nonatomicweakUIView *titlesView;

 

/** 底部的所有内容 */

@property (nonatomicweakUIScrollView *contentView;

 

 

//cookie

@property(nonatomic,strong)NSDictionary *userInfo;

 

@property(nonatomic,copy)NSString * phoneNo;

@end

 

@implementation CFOrderViewController

 

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    [[UIApplication sharedApplicationsetStatusBarStyle:UIStatusBarStyleDefault];

}

 

-(void)viewDidAppear:(BOOL)animated

{

    [super viewDidAppear:animated];

    [_magicController.view setFrame:CGRectMake(00CFScreenWself.view.height-50)];

}

 

 

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    self.navigationItem.title = @"我的订单";

    // 设置导航栏

   // [self setupNav];

    

//    // 01 - 初始化子控制器

//    [self setupChildVces];

//    

//    // 02 - 设置顶部的标签栏

//    [self setupTitlesView];

//    

//    // 03 - 底部的scrollView

//    [self setupContentView];

//    

//    //设置控制器为UIScrollView的代理

//    self.contentView.delegate = self;

    

    /*****fix****/

    [self initView];

    

}

 

#pragma mark 初始化View

-(void)initView

{

    [self addChildViewController:self.magicController];

    [self.view addSubview:_magicController.view];

    [_magicController.magicView reloadData];

}

 

- (NSArray<NSString *> *)menuTitlesForMagicView:(VTMagicView *)magicView {

    return @[@"待支付",@"待发货",@"待收货",@"我的订单"];

}

 

- (UIButton *)magicView:(VTMagicView *)magicView menuItemAtIndex:(NSUInteger)itemIndex {

    static NSString *itemIdentifier = @"itemIdentifier";

    UIButton *menuItem = [magicView dequeueReusableItemWithIdentifier:itemIdentifier];

    if (!menuItem) {

        menuItem = [UIButton buttonWithType:UIButtonTypeCustom];

        [menuItem setTitleColor:RGBCOLOR(000forState:UIControlStateNormal];

        [menuItem setTitleColor:[UIColor colorWithHex:@"FE6F07"forState:UIControlStateSelected];

        menuItem.titleLabel.font = [UIFont fontWithName:@"Helvetica" size:16.f];

    }

    return menuItem;

}

 

- (UIViewController *)magicView:(VTMagicView *)magicView viewControllerAtPage:(NSUInteger)pageIndex {

    

    switch (pageIndex) {

        case 0:

        {

            static NSString *bookmarkId = @"CFtobePaidTableCtrl.identifier";

            CFtobePaidTableCtrl *cr = [magicView dequeueReusablePageWithIdentifier:bookmarkId];

            if (!cr)

                cr = [CFtobePaidTableCtrl new];

            return cr;

        }

            break;

            

        case 1:

        {

            static NSString *bookmarkId = @"CFtoBeShippedTableCtrl.identifier";

            CFtoBeShippedTableCtrl *cr = [magicView dequeueReusablePageWithIdentifier:bookmarkId];

            if (!cr)

                cr = [CFtoBeShippedTableCtrl new];

            return cr;

        }

            

            break;

            

        case 2:

        {

            static NSString *bookmarkId = @"CFreceiptOfGoodsTabelCtrl.identifier";

            CFreceiptOfGoodsTabelCtrl *cr = [magicView dequeueReusablePageWithIdentifier:bookmarkId];

            if (!cr)

                cr = [CFreceiptOfGoodsTabelCtrl new];

            return cr;

        }

            

            break;

            

        case 3:

        {

            static NSString *bookmarkId = @"CFmyOrderTabelCtrl.identifier";

            CFmyOrderTabelCtrl *cr = [magicView dequeueReusablePageWithIdentifier:bookmarkId];

            if (!cr)

                cr = [CFmyOrderTabelCtrl new];

            return cr;

        }

            

            break;

            

        default:

            break;

    }

    

    return nil;

}

 

- (VTMagicController *)magicController {

    if (!_magicController) {

        _magicController = [[VTMagicController allocinit];

        _magicController.magicView.navigationColor = [UIColor whiteColor];

        _magicController.magicView.sliderColor = [UIColor colorWithHex:@"FE6F07"];

        _magicController.magicView.layoutStyle = VTLayoutStyleDivide;

        _magicController.magicView.switchStyle = VTSwitchStyleDefault;

        _magicController.magicView.navigationHeight = 40.f;

        _magicController.magicView.dataSource = self;

        _magicController.magicView.delegate = self;

    }

    return _magicController;

}

 

 

 

/**01 添加子控制器*/

- (void)setupChildVces{

    //待支付

    CFtobePaidTableCtrl *toBePaidCtrl = [[CFtobePaidTableCtrl alloc]initWithNibName:@"CFtobePaidTableCtrl" bundle:nil];

    [toBePaidCtrl.view setFrame:CGRectMake(00CFScreenWCFScreenH)];

    //toBePaidCtrl.view.backgroundColor = [UIColor colorWithRed:0.300 green:0.198 blue:1.000 alpha:1.000];

    toBePaidCtrl.title = @"待支付";

    [self addChildViewController:toBePaidCtrl];

    

    //代发货

    //#import "CFtoBeShippedTableCtrl.h"

    CFtoBeShippedTableCtrl *toBeShippedCtrl = [[CFtoBeShippedTableCtrl alloc]init];

   // toBeShippedCtrl.view.backgroundColor = [UIColor colorWithRed:1.000 green:0.893 blue:0.387 alpha:1.000];

    

    toBeShippedCtrl.title = @"待发货";

    [self addChildViewController:toBeShippedCtrl];

 

    //待收货

    //#import "CFreceiptOfGoodsTabelCtrl.h"

    CFreceiptOfGoodsTabelCtrl *receiptOfGoodsCtrl = [[CFreceiptOfGoodsTabelCtrl alloc]init];

   // receiptOfGoodsCtrl.view.backgroundColor = [UIColor colorWithRed:1.000 green:0.118 blue:0.783 alpha:1.000];

     receiptOfGoodsCtrl.title = @"待收货";

    [self addChildViewController:receiptOfGoodsCtrl];

 

    //我的订单

    //#import "CFmyOrderTabelCtrl.h"

    CFmyOrderTabelCtrl *myOrderCtrl = [[CFmyOrderTabelCtrl alloc]init];

    //myOrderCtrl.view.backgroundColor = [UIColor colorWithRed:1.000 green:0.160 blue:0.108 alpha:1.000];

    myOrderCtrl.title = @"我的订单";

    [self addChildViewController:myOrderCtrl];

 //   NSLog(@"子控制器有: %@",self.childViewControllers);

    

    

}

 

/**

 *  @author 李洪强, 16-08-30 16:08:10

 *

 *   **02 - 设置顶部的标签栏*/

- (void)setupTitlesView{

    // 标签栏整体

    UIView *titlesView = [[UIView allocinit];

    titlesView.backgroundColor = [[UIColor whiteColorcolorWithAlphaComponent:0.7];

    titlesView.width = self.view.width;

    titlesView.height = CFTitlesViewH;

    titlesView.y = 0;

    [self.view addSubview:titlesView];

    self.titlesView = titlesView;

    

    

    

    // 底部的橙色指示器

    UIView *indicatorView = [[UIView allocinit];

    indicatorView.backgroundColor = [UIColor orangeColor];

    indicatorView.height = 2;

    indicatorView.tag = -1;

    indicatorView.y = titlesView.height - indicatorView.height;

    self.indicatorView = indicatorView;

    

    // 内部的子标签

    CGFloat width = titlesView.width / self.childViewControllers.count;

    CGFloat height = titlesView.height;

    for (NSInteger i = 0; i<self.childViewControllers.count; i++) {

        UIButton *button = [[UIButton allocinit];

        button.tag = i;

        button.height = height;

        button.width = width;

        button.x = i * width;

        UIViewController * vc = self.childViewControllers[i];

        [button setTitle:vc.title forState:UIControlStateNormal];

        //        [button layoutIfNeeded]; // 强制布局(强制更新子控件的frame)

        [button setTitleColor:[UIColor blackColorforState:UIControlStateNormal];

        [button setTitleColor:[UIColor orangeColorforState:UIControlStateDisabled];

        button.titleLabel.font = [UIFont systemFontOfSize:14];

        [button addTarget:self action:@selector(titleClick:) forControlEvents:UIControlEventTouchUpInside];

        [titlesView addSubview:button];

        

        // 默认点击了第一个按钮

        if (i == 0) {

            button.enabled = NO;

            self.selectedButton = button;

            

            // 让按钮内部的label根据文字内容来计算尺寸

            [button.titleLabel sizeToFit];

            self.indicatorView.width = button.width;

            self.indicatorView.centerX = button.centerX;

        }

    }

    

    [titlesView addSubview:indicatorView];

 

    /**

     李洪强-2016-8-31

     添加顶部标题栏的竖线*/

    CGFloat lineW = 1;

    CGFloat lineH = 20;

    for(NSInteger i = 0; i < 3; i++){

        UIView *lineView = [[UIView alloc]init];

        lineView.backgroundColor = [UIColor colorWithWhite:0.845 alpha:1.000];

        lineView.x = i*self.selectedButton.width + self.selectedButton.width;

        lineView.y = 12;

        lineView.frame = CGRectMake(lineView.x, lineView.y, lineW, lineH);

        [self.titlesView addSubview:lineView];

        

    }

}

 

- (void)titleClick:(UIButton *)button

{

    // 修改按钮状态

    self.selectedButton.enabled = YES;

    button.enabled = NO;

    self.selectedButton = button;

    

    // 动画

    [UIView animateWithDuration:0.25 animations:^{

        self.indicatorView.width = button.width;

        self.indicatorView.centerX = button.centerX;

    }];

    

    // 滚动

    CGPoint offset = self.contentView.contentOffset;

    offset.x = button.tag * self.contentView.width;

    [self.contentView setContentOffset:offset animated:YES];

    

    

}

 

 

 

// 03 - 底部的scrollView

 

- (void)setupContentView{

    // 不要自动调整inset

    self.automaticallyAdjustsScrollViewInsets = NO;

    

    UIScrollView *contentView = [[UIScrollView allocinit];

   // contentView.frame = self.view.bounds;

    contentView.frame = CGRectMake(self.view.x40CFScreenWCFScreenH - 150);

    contentView.delegate = self;

    contentView.pagingEnabled = YES;

    [self.view insertSubview:contentView atIndex:0];

    contentView.contentSize = CGSizeMake(contentView.width * self.childViewControllers.count0);

    self.contentView = contentView;

    

    // 添加第一个控制器的view

    [self scrollViewDidEndScrollingAnimation:contentView];

    

    

}

 

 

 

 

//1 待支付

- (IBAction)toBePaid:(id)sender {

    NSLog(@"点击了待支付按钮");

    self.orangeView1.hidden = NO;

    self.orangeView2.hidden = YES;

    self.orangeView3.hidden = YES;

    self.orangeView4.hidden = YES;

    CGFloat offsetX = 0 * self.contentsScrollView.frame.size.width;

    CGPoint offset = CGPointMake(offsetX, self.contentsScrollView.contentOffset.y);

    // 设置偏移量

    [self.contentsScrollView setContentOffset:offset animated:YES];

    self.tobePaidBtn.selected = YES;

    self.toBeShippedBtn.selected = NO;

    self.receiptOfGoodsBtn.selected = NO;

    self.myOrderBtn.selected = NO;

    

}

 

/** 2待发货*/

//toBeShipped

- (IBAction)toBeShipped:(id)sender {

    NSLog(@"点击了代发货");

    self.orangeView1.hidden = YES;

    self.orangeView2.hidden = NO;

    self.orangeView3.hidden = YES;

    self.orangeView4.hidden = YES;

    

    CGFloat offsetX = 1 * self.contentsScrollView.frame.size.width;

    CGPoint offset = CGPointMake(offsetX, self.contentsScrollView.contentOffset.y);

    // 设置偏移量

    [self.contentsScrollView setContentOffset:offset animated:YES];

    

    

    self.tobePaidBtn.selected = NO;

    self.toBeShippedBtn.selected = YES;

    self.receiptOfGoodsBtn.selected = NO;

    self.myOrderBtn.selected = NO;

}

/** 3待收货*/

//receiptOfGoods

- (IBAction)receiptOfGoods:(id)sender {

    NSLog(@"点击了待收货按钮");

    self.orangeView1.hidden = YES;

    self.orangeView2.hidden = YES;

    self.orangeView3.hidden = NO;

    self.orangeView4.hidden = YES;

    

    self.tobePaidBtn.selected = NO;

    self.toBeShippedBtn.selected = NO;

    self.receiptOfGoodsBtn.selected = YES;

    self.myOrderBtn.selected = NO;

    

    CGFloat offsetX = 2 * self.contentsScrollView.frame.size.width;

    CGPoint offset = CGPointMake(offsetX, self.contentsScrollView.contentOffset.y);

    // 设置偏移量

    [self.contentsScrollView setContentOffset:offset animated:YES];

    

}

 

/*4*我的订单*/

//myOrder

- (IBAction)myOrder:(id)sender {

    NSLog(@"点击了我的订单按钮");

    self.orangeView1.hidden = YES;

    self.orangeView2.hidden = YES;

    self.orangeView3.hidden = YES;

    self.orangeView4.hidden = NO;

    

    CGFloat offsetX = 3 * self.contentsScrollView.frame.size.width;

    CGPoint offset = CGPointMake(offsetX, self.contentsScrollView.contentOffset.y);

    // 设置偏移量

    [self.contentsScrollView setContentOffset:offset animated:YES];

    

    self.tobePaidBtn.selected = NO;

    self.toBeShippedBtn.selected = NO;

    self.receiptOfGoodsBtn.selected = NO;

    self.myOrderBtn.selected = YES;

}

 

#pragma mark - <UIScrollViewDelegate> Scrollview的代理方法

/**

 *  scrollView动画结束时调用(添加子控制器的viewself.contentsScrollView)

 *  self.contentsScrollView == scrollView

 *  用户手动触发的动画结束,不会调用这个方法

 */

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

{

    // 当前的索引

    NSInteger index = scrollView.contentOffset.x / scrollView.width;

    

    // 取出子控制器

    UIViewController *vc = self.childViewControllers[index];

    vc.view.x = scrollView.contentOffset.x;

    vc.view.y = 0// 设置控制器viewy值为0(默认是20)

    vc.view.height = scrollView.height// 设置控制器viewheight值为整个屏幕的高度(默认是比屏幕高度少个20)

    

    [scrollView addSubview:vc.view];

    

}

 

/**

 *  scrollView停止滚动时调用这个方法(用户手动触发的动画停止,会调用这个方法)

 */

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

    [self scrollViewDidEndScrollingAnimation:scrollView];

    

    // 点击按钮

    NSInteger index = scrollView.contentOffset.x / scrollView.width;

    [self titleClick:self.titlesView.subviews[index]];

}

 

 

- (void)dealloc

{

 

    

}

 

 

/**

 *  SVProgressHUD 消失方法

 *

 *  @return

 */

 

- (void)dismiss{

    [SVProgressHUD dismiss];

}

 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

    if (buttonIndex == 1) {

        NSString * str = [NSString stringWithFormat:@"telprompt://%@",self.phoneNo];

        NSURL * url = [NSURL URLWithString:str];

        [[UIApplication sharedApplicationopenURL:url];

    }

}

 

 

@end

原文地址:https://www.cnblogs.com/LiLihongqiang/p/5861749.html