CNUpSlideViewController.swift
9.17 KB
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
//
// CNUpSlideViewController.swift
// metaCode
//
// Created by zx on 2023/10/13.
//
import Foundation
import UIKit
//下滑tableview背景颜色
let kCNDownSlideBackgroundColorHex: String = "#F7F8FA"
///CNliveDownSlideModel Type
let SlideModelTypeRecommend4: String = "4"//4一排两个 推荐课程&推荐活动
let SlideModelTypeTodayRecommend74: String = "74"//74今日推荐
let SlideModelTypeAllCourse12: String = "12"//12列表全部课程
let SlideModelTypeOneCourse75: String = "75"//75单课程大图
class CNUpSlideViewController: CNLiveBaseViewController,UITableViewDelegate,UITableViewDataSource{
let kCNLiveDownSlideCellIdentifier = "kCNLiveDownSlideCellIdentifier"
let kCNLiveDownSlideRecommendCellIdentifier = "kCNLiveDownSlideRecommendCellIdentifier"
let kCNLiveDownSlideTodayRecommendCellIdentifier = "kCNLiveDownSlideTodayRecommendCellIdentifier"
var totolNum = 0//一共显示多少行cell
var selectedCell: CNDownSlideSingleCourseCell?
var statusBarShouldBeHidden = false
//we need to set `View controller-based status bar appearance = YES` in info.plist.
//so we can be able to hide statusBar.
override var prefersStatusBarHidden: Bool {
return statusBarShouldBeHidden
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
var _downPath:String?
var downPath:String? {
get{
return _downPath
}
set{
_downPath = newValue!
self.getPageApi()
}
}
// MARK: - 懒加载
///数据源
lazy var dataArray: NSMutableArray = {
var dataArray = NSMutableArray()
return dataArray
}()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.updateStatusBarAndTabbarFrame(visible: true)
}
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = HexColor(kCNDownSlideBackgroundColorHex)
view.addSubview(tableView)
tableView.frame = CGRect(x: 0, y: KStatusBarHeight, width: KSreenWidth, height: KSreenHeight-DownSlideBottomViewHeight-KStatusBarHeight)
}
lazy var tableView : UITableView = {
let tableView = UITableView(frame: .zero, style: .plain)
tableView.dataSource = self
tableView.delegate = self
tableView.separatorStyle = .none
tableView.register(CNDownSlideSingleCourseCell.self, forCellReuseIdentifier: kCNLiveDownSlideCellIdentifier)
tableView.backgroundColor = HexColor(kCNDownSlideBackgroundColorHex)
return tableView
}()
private func updateStatusBarAndTabbarFrame(visible: Bool) {
statusBarShouldBeHidden = !visible
UIView.animate(withDuration: 0.25) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
// MARK: - UITableViewDelegate
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
self.dataArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let slideModel = self.dataArray[indexPath.row] as! CNLiveDownSlideModel
//type=4一排两个 推荐课程&推荐活动; 74今日推荐; 12列表全部课程; 75单课程大图
if slideModel.type == SlideModelTypeRecommend4{
guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveDownSlideRecommendCellIdentifier) as? CNLiveDownSlideRecommendCell
else {
let cell = CNLiveDownSlideRecommendCell()
cell.slideModel = slideModel
return cell
}
cell.slideModel = slideModel
return cell
}else if slideModel.type == SlideModelTypeTodayRecommend74{
guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveDownSlideTodayRecommendCellIdentifier) as? CNLiveDownSlideTodayRecommendCell
else {
let cell = CNLiveDownSlideTodayRecommendCell()
cell.slideModel = slideModel
return cell
}
cell.slideModel = slideModel
return cell
}else if slideModel.type == SlideModelTypeAllCourse12{
guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveDownSlideCellIdentifier) as? CNDownSlideSingleCourseCell
else {
let cell = CNDownSlideSingleCourseCell()
cell.slideModel = slideModel
return cell
}
cell.slideModel = slideModel
return cell
}else if slideModel.type == SlideModelTypeOneCourse75{
guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveDownSlideCellIdentifier) as? CNDownSlideSingleCourseCell
else {
let cell = CNDownSlideSingleCourseCell()
cell.slideModel = slideModel
return cell
}
cell.slideModel = slideModel
return cell
}else{
return UITableViewCell()
}
}
func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) {
guard let row = tableView.cellForRow(at: indexPath) as? CNDownSlideSingleCourseCell else { return }
UIView.animate(withDuration: 0.1) {
row.bgBackView.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
}
}
func tableView(_ tableView: UITableView, didUnhighlightRowAt indexPath: IndexPath) {
guard let row = tableView.cellForRow(at: indexPath) as? CNDownSlideSingleCourseCell else { return }
UIView.animate(withDuration: 0.3) {
row.bgBackView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let slideModel = self.dataArray[indexPath.row] as! CNLiveDownSlideModel
//type=4一排两个 推荐课程&推荐活动; 74今日推荐; 12列表全部课程; 75单课程大图
if slideModel.type == SlideModelTypeRecommend4{
}else if slideModel.type == SlideModelTypeTodayRecommend74{
}else if slideModel.type == SlideModelTypeAllCourse12{
guard let cell = tableView.cellForRow(at: indexPath) as? CNDownSlideSingleCourseCell else { return }
selectedCell = cell
let detailVC = CNSlideBaseNavigationController(rootViewController: CNUpSlideDetailViewController(cell: cell,slideModel: slideModel))
detailVC.dismissClosure = { [weak self] in
guard let StrongSelf = self else { return }
StrongSelf.updateStatusBarAndTabbarFrame(visible: true)
}
updateStatusBarAndTabbarFrame(visible: false)
present(detailVC, animated: true, completion: nil)
}else if slideModel.type == SlideModelTypeOneCourse75{
guard let cell = tableView.cellForRow(at: indexPath) as? CNDownSlideSingleCourseCell else { return }
selectedCell = cell
let detailVC = CNSlideBaseNavigationController(rootViewController: CNUpSlideDetailViewController(cell: cell,slideModel: slideModel))
detailVC.dismissClosure = { [weak self] in
guard let StrongSelf = self else { return }
StrongSelf.updateStatusBarAndTabbarFrame(visible: true)
}
updateStatusBarAndTabbarFrame(visible: false)
present(detailVC, animated: true, completion: nil)
}
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let slideModel = self.dataArray[indexPath.row] as! CNLiveDownSlideModel
return CGFloat(slideModel.cellH)
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 0
}
//MARK: - 网络请求获取详情页
func getPageApi()
{
showLoading(message: "")
CNLiveDownSlideViewModel.requestGetPage(pageId: _downPath! as NSString) { result, status in
hiddenLoading()
if status == .success{
self.dataArray.addObjects(from: result as! [Any])
let newDataArray = NSMutableArray()
for slideModel in self.dataArray {
if let model = slideModel as? CNLiveDownSlideModel{
let layout = CNLiveDownSlideModelLayout.init(model: model)
newDataArray.addObjects(from: [layout.getCellHModel()])
}
}
self.dataArray.removeAllObjects()
self.dataArray.addObjects(from: newDataArray as! [Any])
self.tableView.reloadData()
}else if (status == .failed){
// self.NetApiStatus = .apiError
}else if (status == .noNetwork){
// self.NetApiStatus = .notNetwork
}
}
//
}
}