筛选菜单

默认:


展开


选择


分装VIew的代码


//

//  MenuView.swift

//  分装

//

//  Created by CJW on 16/12/6.

//  Copyright © 2016 cjw. All rights reserved.

//


import UIKit


class MenuView: UIView {


    var titles:[String]?

    private var oldLabels:UILabel = UILabel()

    private var currentIndex:Int = 0

    private lazy var scrollView : UIScrollView = {

        let scrollView = UIScrollView()

        scrollView.showsHorizontalScrollIndicator = false

        scrollView.scrollsToTop = false

        scrollView.bounces = false

        return scrollView

    }()

    

    override init(frame: CGRect)

    {

        super.init(frame: frame)

    }

    required init?(coder aDecoder: NSCoder) {

        fatalError("init(coder:) has not been implemented")

    }

}

//

extension MenuView

{

    func setupUI()

    {

        // 1.添加UIScrollView

        addSubview(scrollView)

        scrollView.frame = bounds

        // 2.添加title对应的Label

        setupTitleLabels()

    }

    

     func setupTitleLabels() {

        

        // 0.确定label的一些frame的值

        let labelW : CGFloat = frame.width

        let labelH : CGFloat = (frame.height / CGFloat(titles!.count))-1

        let labelX : CGFloat = 10

        

        for (index, title) in titles!.enumerate() {

            if (self.viewWithTag(index+100)==nil){

            // 1.创建UILabel

            let label = UILabel()

            

            // 1.创建UILabel底线

            let labelline = UILabel()

            labelline.backgroundColor = UIColor.blackColor()

            

            // 2.设置Label的属性

            label.text = title

            label.tag = index+100

            label.font = UIFont.systemFontOfSize(14.0)

            label.textColor = UIColor.blackColor()

            label.textAlignment = .Left

           

            

            // 3.设置labelframe

            let labelY : CGFloat = labelH * CGFloat(index)

            label.frame = CGRect(x: labelX, y: labelY, width: labelW, height: labelH)

            labelline.frame = CGRect(x: 0, y: labelY+labelH, width: labelW, height: 1)

            

            // 4.label添加到scrollView

            scrollView.addSubview(label)

            scrollView.addSubview(labelline)

            

            // 5.Label添加手势

            label.userInteractionEnabled = true

            let tapGes = UITapGestureRecognizer(target: self, action: #selector(self.titleLabelClick(_:)))

            label.addGestureRecognizer(tapGes)

            }else

            {

                guard let label:UILabel = self.viewWithTag(index+100) as? UILabel else {return}

                label.text = title

            }

        }

    }


}



// MARK:- 监听Label的点击

extension MenuView {

    @objc private func titleLabelClick(tapGes : UITapGestureRecognizer) {

        

        // 0.获取当前Label

        guard let currentLabel = tapGes.view as? UILabel else { return }

        

        // 1.如果是重复点击同一个Title,那么直接返回

        if currentLabel.tag == currentIndex { return }


        // 2.获取之前的Label

        let oldLabel = oldLabels

        

        // 3.切换文字的颜色

        currentLabel.textColor = UIColor.orangeColor()

        oldLabel.textColor = UIColor.blackColor()

        

        // 4.保存最新Label的下标值

        currentIndex = currentLabel.tag

        oldLabels = currentLabel


    }

}



//VC里面使用View

//

//  ViewController.swift

//  分装

//

//  Created by CJW on 16/12/6.

//  Copyright © 2016 cjw. All rights reserved.

//


import UIKit

private let KScreenW:CGFloat = UIScreen.mainScreen().bounds.size.width

private let KScreenH:CGFloat = UIScreen.mainScreen().bounds.size.height

private let KbtnW:CGFloat = (KScreenW)/3

class ViewController: UIViewController {


    

    

    private var showFirstOrNo:Bool = false

    /// MARK:-懒加载

    private lazy var bgView : UIView =

        {

            let aView = UIView()

            return aView

    }()

    private lazy var fristBtn : UIButton =

        {

            let abtn = UIButton()

            abtn.setTitle("默认排序", forState: .Normal)

            abtn.setTitleColor(UIColor.blackColor(), forState: .Normal)

            abtn.layer.borderWidth = 1

            abtn.layer.borderColor = UIColor.blackColor().CGColor

            abtn.addTarget(self, action: #selector(frisetBtnClick), forControlEvents: .TouchUpInside)

            return abtn

    }()

    private lazy var secendBtn : UIButton =

        {

            let abtn = UIButton()

            abtn.setTitle("默认分类", forState: .Normal)

            abtn.setTitleColor(UIColor.blackColor(), forState: .Normal)

            abtn.layer.borderWidth = 1

            abtn.layer.borderColor = UIColor.blackColor().CGColor

            return abtn

    }()

    private lazy var thirdBtn : UIButton =

        {

            let abtn = UIButton()

            abtn.setTitle("默认筛选", forState: .Normal)

            abtn.setTitleColor(UIColor.blackColor(), forState: .Normal)

            abtn.layer.borderWidth = 1

            abtn.layer.borderColor = UIColor.blackColor().CGColor

            return abtn

    }()

    

    private lazy var frisetMeun : MenuView = {

        let frisetMenu = MenuView()

        return frisetMenu

    }()

    override func viewDidLoad() {

        super.viewDidLoad()

        setupUI()

        // Do any additional setup after loading the view, typically from a nib.

    }


   

    

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }



}

//创建UI

extension ViewController

{

    

    private func setupUI()

    {

        view.addSubview(bgView)

        bgView.addSubview(fristBtn)

        bgView.addSubview(secendBtn)

        bgView.addSubview(thirdBtn)

        let seachTitle = ["价格从高到低","价格从低到高","产品中期","产品短期","无敌小霸王"]

        self.frisetMeun.titles = seachTitle

        let menuViewH:CGFloat = 30 * CGFloat(seachTitle.count)

        let frame:CGRect = CGRect(x: -KScreenW, y: 64+45, width: KScreenW, height: menuViewH)

        self.frisetMeun.frame = frame

        self.frisetMeun.setupUI()

        view.addSubview(frisetMeun)

        

        bgView.autoPinEdgesToSuperviewEdgesWithInsets(UIEdgeInsets(top: 64, left: 0, bottom: 0, right: 0),excludingEdge:.Bottom)

        bgView.autoSetDimension(.Height, toSize: 45)

        

        fristBtn.autoPinEdgesToSuperviewEdgesWithInsets(UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 0),excludingEdge:.Right)

        fristBtn.autoSetDimension(.Width, toSize:KbtnW)

        

        secendBtn.autoPinEdge(.Left, toEdge: .Right, ofView: fristBtn)

        secendBtn.autoSetDimension(.Width, toSize: KbtnW)

        secendBtn.autoPinEdge(.Top, toEdge: .Top, ofView: bgView,withOffset: 1)

        secendBtn.autoPinEdge(.Bottom, toEdge: .Bottom, ofView: bgView,withOffset: -1)

        

        thirdBtn.autoPinEdgesToSuperviewEdgesWithInsets(UIEdgeInsets(top: 1, left: 0, bottom:1, right: 1),excludingEdge:.Left)

        thirdBtn.autoSetDimension(.Width, toSize: KbtnW)

     

      

        

//        frisetMeun.autoPinEdge(.Left, toEdge: .Left, ofView: self.view)

//        frisetMeun.autoPinEdge(.Right, toEdge: .Right, ofView: self.view)

//        frisetMeun.autoPinEdge(.Top, toEdge: .Bottom, ofView: bgView)

//        frisetMeunHConstranint = frisetMeun.autoSetDimension(.Height, toSize: 0)

    }

}

//按钮点击事件

extension ViewController

{

    func frisetBtnClick()

    {

       print("点击了")

        if showFirstOrNo == false

        {

            showfirstMenu()

        }

        else

        {

           hidefirstMenu()

        }

    

    }

    func showfirstMenu()

    {

            let seachTitle = ["价格从高到低","价格从低到高","产品中期","产品短期","无敌小霸王"]

            let menuViewH:CGFloat = 30 * CGFloat(seachTitle.count)

            let frame:CGRect = CGRect(x: 0, y: 64+45, width: KScreenW, height: menuViewH)

            self.frisetMeun.frame = frame

            self.showFirstOrNo = true

        

    }

    func hidefirstMenu()

    {

      self.frisetMeun.frame = CGRect(x: -KScreenW, y:64+45, width: KScreenW, height: 0)

      self.showFirstOrNo = false

    }

    override func canBecomeFirstResponder() -> Bool {

        return true

    }

}








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值