效果如图
![](https://img.haomeiwen.com/i1747706/758cb99151186383.png)
使用方法
//设置快速入口
func setupGridView() {
let gridView = LFGridView.init(frame: CGRect.init(x: 0, y: 150, width: kScreenWidth, height: 100))
gridView.delegate = self
gridView.deviderType = .deviderNone
gridView.reLoadData()
headView.addSubview(gridView)
}
遵循代理方法
extension HomeViewController {
func heightForRowInGridView(gridView: LFGridView) -> CGFloat {
return 100
}
func numberOfColumsInGridView(gridView: LFGridView) -> Int {
return 3
}
func totolNumberOfGridView(gridView: LFGridView) -> Int {
return 3
}
func gridViewAtIndex(index: Int, gridView: LFGridView) -> LFGridButton {
let button = LFGridButton()
let imageV = UIImageView()
imageV.image = UIImage.init(named: gridImages[index])
button.addSubview(imageV)
imageV.snp_makeConstraints { (make) in
make.centerX.equalToSuperview()
make.top.equalToSuperview().offset(20)
make.width.equalTo(33)
make.height.equalTo(30)
}
let label = UILabel()
label.text = gridTitles[index]
label.font = FONT(font: 14)
button.addSubview(label)
label.snp_makeConstraints { (make) in
make.centerX.equalToSuperview()
make.top.equalTo(imageV.snp_bottom).offset(10)
}
return button
}
func gridViewDidClick(index: Int, gridView: LFGridView) {
}
}
//
// LFGridView.swift
// PXSSwift
//
// Created by Pro on 2020/5/6.
// Copyright © 2020 刘刘峰. All rights reserved.
//
import UIKit
@objc protocol LFGridViewDelegate {
//每行的高度
@objc func heightForRowInGridView(gridView:LFGridView) ->CGFloat
//gridView列的数量
@objc func numberOfColumsInGridView(gridView:LFGridView) ->Int
//gridView中item总量
@objc func totolNumberOfGridView(gridView:LFGridView) ->Int
//返回每个item
@objc func gridViewAtIndex(index:Int,gridView:LFGridView) ->LFGridButton
//item点击事件
@objc func gridViewDidClick(index:Int,gridView:LFGridView)
}
//TODO 加入分割线
enum LFGridViewDeviderType {
case deviderDefault
case deviderNone
}
class LFGridView: UIView {
weak var delegate :LFGridViewDelegate?
var deviderType: LFGridViewDeviderType? {
didSet {
if self.deviderType == LFGridViewDeviderType.deviderDefault {
self.isShowDevider = true
}else {
self.isShowDevider = false
}
if self.isShowDevider == false {
for view in self.dividers{
if view.superview != nil {
view.removeFromSuperview()
}
}
}
}
}
var dividers = [UIView]()
var isShowDevider:Bool = true
var dataSource = [Any]()
override init(frame: CGRect) {
super.init(frame: frame)
self.deviderType = .deviderDefault
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func reLoadData() {
self.dividers.removeAll()
for view in self.subviews {
if view.superview != nil {
view.removeFromSuperview()
}
}
var row = 0
var column = 0
var sum = 0
var size = CGSize.zero
if self.delegate != nil {
column = self.delegate!.numberOfColumsInGridView(gridView: self)
sum = self.delegate!.totolNumberOfGridView(gridView: self)
size.height = self.delegate!.heightForRowInGridView(gridView: self)
}
if column>0 {
row = sum / column + (sum % column > 0 ? 1:0)
size.width = self.width / CGFloat(column)
}
var orginX:CGFloat = 0
var orginY:CGFloat = 0
for i in 0..<row {
for j in 0..<column {
if delegate != nil {
orginX = j.cgFloat * size.width
orginY = i.cgFloat * size.height
let index = i * column + j
//
let view = delegate!.gridViewAtIndex(index: index, gridView: self)
view.frame = CGRect.init(x: orginX, y: orginY, width: size.width, height: size.height)
view.tag = index + 999
view.addTarget(self, action: #selector(onButtonClick(button:)), for: UIControl.Event.touchUpInside)
self.addSubview(view)
if self.isShowDevider == true {
let dividLine = UIView.init(frame: CGRect.init(x: 0, y: 0, width: 0.5, height: size.height))
dividLine.backgroundColor = AppColor.lineColor
dividLine.lf_left = view.lf_right-0.5
self.addSubview(dividLine)
dividers.append(dividLine)
}
}
}
}
//设置frame
self.frame = CGRect.init(x: self.frame.origin.x, y: self.frame.origin.y, width: self.width, height: row.cgFloat * size.height)
}
@objc func onButtonClick(button:UIButton) {
if delegate != nil {
delegate!.gridViewDidClick(index: button.tag - 999, gridView: self)
}
}
func getGridViewHeight()-> CGFloat {
return self.height
}
}
网友评论