logo头像
Snippet 博客主题

自定义格子视图LFGridView

效果如图
image.png

使用方法

1
2
3
4
5
6
7
8
9
//设置快速入口
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)
}

遵循代理方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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) {

}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//
// 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
}


}
微信打赏

赞赏是不耍流氓的鼓励