zoukankan      html  css  js  c++  java
  • iOS 展示二级页面

    ViewController 调用

    #import "ViewController.h"

    @implementation ViewController

    - (void)viewDidLoad

    {

        [super viewDidLoad];

        

        self.title = @"测试";

        self.view.backgroundColor = [UIColor whiteColor];

        

        //自定义调用

        NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"1",@"2",@"3",@"4",@"5",@"6",@"1",@"2", nil];

        NSMutableArray *textArr = [[NSMutableArray alloc] initWithObjects:@"全部",@"女装",@"箱包",@"配饰",@"内衣",@"男装",@"美妆",@"母婴",@"居家",@"家电",@"食品",@"鞋靴",@"全部",@"女装", nil];

        //    self.customView = [[CustomView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, 100) dataArray:arr];

        self.customView = [[CustomView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, 100) dataArray:arr textArray:textArr];

        [self.view addSubview:self.customView];

    }

    //一级页面视图  CustomView

    #import <UIKit/UIKit.h>

    #import "CustomFenLeiChildView.h"

    //自定义头文件

    @interface CustomView : UIView

    {

        //记录相同按钮的Y

        float ButtonY;

        //记录选中的分类子视图tag

        int selectedTag;

        CustomFenLeiChildView *lastCustomView;

        CustomFenLeiChildView *customView;

        //记录button

        UIButton *laseButton;

        //是否是展开

        BOOL isZhanKai;

    }

    @property (nonatomic, strong)NSMutableArray *dataArr;

    -(id)initWithFrame:(CGRect)frame dataArray:(NSMutableArray *)dataArray;

    -(id)initWithFrame:(CGRect)frame dataArray:(NSMutableArray *)dataArray textArray:(NSMutableArray *)textArray;

    @end

    //一级视图实现文件.m 

    #import "CustomView.h"

    //自定义实现文件

    @implementation CustomView

    -(id)initWithFrame:(CGRect)frame dataArray:(NSMutableArray *)dataArray

    {

        self = [super initWithFrame:frame];

        if (self)

        {

            //button坐标

            float bx = 0;

            float by = 0;

            float bw = frame.size.width/4;

            float bh = bw;

            

            //imageView坐标

            float imgX = 10;

            float imgW = bw-20;

            float imgH = imgW;

            float imgY = 10;

            

            for (int i = 0; i < dataArray.count; i++)

            {

            

                UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

    //            button.backgroundColor = [UIColor yellowColor];

                

                if (i % 4 == 0 && i > 0)

                {

                    bx = 0;

                    by += bh;

                }

                button.frame = CGRectMake(bx, by, bw, bh);

                UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(imgX, imgY, imgW, imgH)];

    //            imgView.backgroundColor = [UIColor redColor];

                imgView.image = [UIImage imageNamed:@"1.png"];

                [button addSubview:imgView];

                [self addSubview:button];

                bx += bw;

            }

            

        }

        return self;

    }

    -(id)initWithFrame:(CGRect)frame dataArray:(NSMutableArray *)dataArray textArray:(NSMutableArray *)textArray

    {

        self = [super initWithFrame:frame];

        if (self)

        {

            self.dataArr = [[NSMutableArray alloc] init];

            self.dataArr = textArray;

            //button坐标

            float bx = 0;

            float by = 0;

            float bw = frame.size.width/4;

            float bh = bw;

            

            //imageView坐标

            float imgX = 15;

            float imgW = bw-30;

            float imgH = imgW;

            float imgY = 15;

            

            float selfHeight = 0.0;

            

            for (int i = 0; i < dataArray.count; i++)

            {

                UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

                button.tag = i+100;

                

                if (i % 4 == 0 && i > 0)

                {

                    bx = 0;

                    by += bh;

                    ButtonY = by;

                }

                

                button.frame = CGRectMake(bx, by, bw, bh);

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

                [self addSubview:button];

                

                UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(imgX, imgY, imgW, imgH)];

                imgView.layer.cornerRadius = imgW/2;

                imgView.layer.masksToBounds = YES;

                imgView.image = [UIImage imageNamed:@"1.png"];

                [button addSubview:imgView];

                

                UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(imgX, imgY+imgH+3, imgW, 20)];

                label.text = [textArray objectAtIndex:i];

                label.font = [UIFont systemFontOfSize:14.0];

                label.textColor = [UIColor colorWithRed:65/255.0 green:65/255.0 blue:65/255.0 alpha:1];

                label.textAlignment = NSTextAlignmentCenter;

                [button addSubview:label];

                bx += bw;

                selfHeight = by+bh;

            }

            

            CGRect selfFrame = self.frame;

            selfFrame.size.height = selfHeight;

            self.frame = selfFrame;

        }

        return self;

    }

    -(void)buttonClick:(UIButton *)btn

    {

        BOOL bl = NO;

        int index = (int)btn.tag - 100;

        if (laseButton)

        {

            ButtonY = laseButton.frame.origin.y;

        }

        

        if(btn && btn.tag == laseButton.tag)

        {

            bl = YES;

        }

        

        if (lastCustomView)

        {

            [lastCustomView removeFromSuperview];

            lastCustomView = nil;

        }

        CGRect btnFrame = btn.frame;

        if (!bl)

        {

            laseButton = btn;

            isZhanKai = YES;

            UILabel *label = [btn.subviews lastObject];

            NSLog(@"%@",label.text);

            float childViewY = btnFrame.origin.y+btnFrame.size.height + 10;

            NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"上衣",@"裤装",@"裙装",@"套装",@"大码", nil];

            CustomFenLeiChildView *currntView = [[CustomFenLeiChildView alloc] initWithFrame:CGRectMake(0, childViewY, self.frame.size.width, 120) fenLeiArray:array];

            [self addSubview:currntView];

            selectedTag = index+1000;

            currntView.tag = selectedTag;

            lastCustomView = currntView;

            customView = currntView;

            [self updateUI:btnFrame childViewFrame:currntView.frame index:index];

            

        }

        else

        {

            isZhanKai = NO;

            laseButton = nil;

            UILabel *label = [btn.subviews lastObject];

            NSLog(@"%@",label.text);

            customView = (CustomFenLeiChildView *)[self viewWithTag:selectedTag];

            CGRect customRect = customView.frame;

            customRect.size.height = 0;

            [customView removeFromSuperview];

            [self updateUI:btnFrame childViewFrame:customRect index:index];

            

        }

        

    }

    -(void)updateUI:(CGRect)btnFrame childViewFrame:(CGRect)childViewFrame index:(int)index

    {

        //去掉原来的展开视图

        //重新排列button

        //获取当前点击buton的y

        //设置展开视图

        //后面的修改view

        

        //判断:1.当前展开视图是否展开(如果是展开,获取到当前点击的button,计算展开在哪,如果不需要展开,获取到当前点击的button,计算之后的button的坐标)

        

        

        //--------------重新排列

        

        //button坐标

        float bx = 0;

        float by = 0;

        float bw = self.frame.size.width/4;

        float bh = bw;

        

        

        float selfHeight = 0.0;

        

        for (int i = 0; i < self.dataArr.count; i++)

        {

            UIButton *button = (UIButton *)[self viewWithTag:i+100];

            CGRect buttonFrame = button.frame;

            

            if (i % 4 == 0 && i > 0)

            {

                bx = 0;

                by += bh;

            }

            

            buttonFrame = CGRectMake(bx, by, bw, bh);

            button.frame = buttonFrame;

            bx += bw;

            selfHeight = by+bh;

        }

        

        if (isZhanKai)

        {

            bx = 0;

            if (btnFrame.origin.y > ButtonY)

            {

                UIButton *button = (UIButton *)[self viewWithTag:index+100];

                customView = (CustomFenLeiChildView *)[self viewWithTag:index+1000];

                CGRect customRect = customView.frame;

                customRect.origin.y = button.frame.origin.y+button.frame.size.height+10;

                customView.frame = customRect;

                by = customView.frame.origin.y+customView.frame.size.height;

            }

            else

            {

                by = childViewFrame.origin.y+childViewFrame.size.height;

            }

            //获取当前的索引

            int a = index % 4;

            int c = 4 - a;

            //获取要开始计算的button的索引

            int b = index + c;

            if (b > self.dataArr.count)

            {

                b = self.dataArr.count;

            }

            for (int i = b; i < self.dataArr.count; i++)

            {

                UIButton *button = (UIButton *)[self viewWithTag:i+100];

                CGRect buttonFrame = button.frame;

                if (i % 4 == 0 && i > b)

                {

                    bx = 0;

                    by += bh;

                }

                

                buttonFrame = CGRectMake(bx, by, bw, bh);

                button.frame = buttonFrame;

                bx += bw;

                selfHeight = by+bh;

            }

        }

        else

        {

            NSLog(@"不是展开");

        }

        CGRect selfFrame = self.frame;

        selfFrame.size.height = selfHeight;

        self.frame = selfFrame;

        

    }

     //展开详情(二级页面视图) CustomFenLeiChildView

    #import <UIKit/UIKit.h>

    #import "LabelOfButton.h"

    @interface CustomFenLeiChildView : UIView

    -(id)initWithFrame:(CGRect)frame fenLeiArray:(NSMutableArray *)fenLeiArray;

    @end

    //展开详情实现文件

    #import "CustomFenLeiChildView.h"

    #define lineBgColor [UIColor colorWithRed:189/255.0 green:189/255.0 blue:189/255.0 alpha:1]

    @implementation CustomFenLeiChildView

    -(id)initWithFrame:(CGRect)frame fenLeiArray:(NSMutableArray *)fenLeiArray

    {

        self = [super initWithFrame:frame];

        if (self)

        {

            UIView *topLine = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 1)];

            topLine.backgroundColor = lineBgColor;

            [self addSubview:topLine];

            //button坐标

            float bx = 0;

            float by = 0;

            float bw = (frame.size.width-1)/2;

            float hang = fenLeiArray.count/2;

            float bh = frame.size.height/hang-1*(hang-1);

            

            float selfHeight = 0.0;

            

            for (int i = 0; i < fenLeiArray.count; i++)

            {

                if (i % 2 == 0 && i > 0)

                {

                    bx = 0;

                    by += bh;

                }

                LabelOfButton *button = [[LabelOfButton alloc] initWithFrame:CGRectMake(bx, by, bw, bh)];

                button.tag = i+100;

                button.textLB.text = fenLeiArray[i];

                button.textLB.textAlignment = NSTextAlignmentCenter;

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

                [self addSubview:button];

                

                UIView *bottomLine = [[UIView alloc] initWithFrame:CGRectMake(bx, by+bh, bw, 1)];

                bottomLine.backgroundColor = lineBgColor;

                [self addSubview:bottomLine];

                

                UIView *shuLine = [[UIView alloc] initWithFrame:CGRectMake(bx+bw, by, 1, bh)];

                shuLine.backgroundColor = lineBgColor;

                [self addSubview:shuLine];

                

                bx += bw;

                selfHeight = by+bh;

            }

            

            if (fenLeiArray.count % 2 == 1)

            {

                LabelOfButton *button = [[LabelOfButton alloc] initWithFrame:CGRectMake(bx, by, bw, bh)];

                button.textLB.text = @"最后一个";

                

                button.tag = fenLeiArray.count+100;

    //            button.textLabel.text = fenLeiArray[i];

                button.textLB.textAlignment = NSTextAlignmentCenter;

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

                [self addSubview:button];

                

                UIView *bottomLine = [[UIView alloc] initWithFrame:CGRectMake(bx, by+bh, bw, 1)];

                bottomLine.backgroundColor = lineBgColor;

                [self addSubview:bottomLine];

            }

            

            CGRect selfFrame = self.frame;

            selfFrame.size.height = selfHeight;

            self.frame = selfFrame;

        }

        return self;

    }

    -(void)buttonClick:(LabelOfButton *)btn

    {

        NSLog(@"%@",btn.textLB.text);

    }

     //自定义button ,添加label

    #import <UIKit/UIKit.h>

    //#import "NewCustomLabel.h"

    @interface LabelOfButton : UIButton

    @property (nonatomic, strong) UILabel *textLB;

    @end

    #import "LabelOfButton.h"

    #define GrayColor [UIColor colorWithRed:165.0/255.0 green:165.0/255.0 blue:165.0/255.0 alpha:1.0]

    @implementation LabelOfButton

    -(id)initWithFrame:(CGRect)frame

    {

        self = [super initWithFrame:frame];

        if (self) {

            self.textLB = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];

            [self.textLB setFont:[UIFont systemFontOfSize:16]];

            self.textLB.textColor = GrayColor;

            self.textLB.textAlignment = NSTextAlignmentLeft;

            [self addSubview:self.textLB];

        }

        return self;

    }

    @end

    实现效果如下图所示

                  

  • 相关阅读:
    Comet OJ CCPC-Wannafly Winter Camp Day1 (Div2, online mirror) F.爬爬爬山-最短路(Dijkstra)(两个板子)+思维(mdzz...) zhixincode
    Codeforces 1104 D. Game with modulo-交互题-二分-woshizhizhang(Codeforces Round #534 (Div. 2))
    POJ 1655.Balancing Act-树的重心(DFS) 模板(vector存图)
    Codeforces gym102058 J. Rising Sun-简单的计算几何+二分 (2018-2019 XIX Open Cup, Grand Prix of Korea (Division 2))
    BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
    51nod 1295 XOR key-区间异或最大值-可持久化01Trie树(模板)
    BZOJ 2588: Spoj 10628. Count on a tree-可持久化线段树+LCA(点权)(树上的操作) 无语(为什么我的LCA的板子不对)
    Codeforces 1099 D. Sum in the tree-构造最小点权和有根树 贪心+DFS(Codeforces Round #530 (Div. 2))
    Codeforces 586D. Phillip and Trains 搜索
    Codeforces 734E. Anton and Tree 搜索
  • 原文地址:https://www.cnblogs.com/camillezlh/p/4619297.html
Copyright © 2011-2022 走看看