默认:
展开
选择
分装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.设置label的frame
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
}
}