Commit ca1cc7ac authored by David黄金龙's avatar David黄金龙

Merge branch 'develop' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS into develop

* 'develop' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS:
  // 权限设置
  // 搜索
  加载更多
  // 搜索
  // 搜索
  提交事件
  // 搜索
  banner跳转逻辑
  获取文章详情接口调试
parents b45d62a9 25b309d9
...@@ -13,7 +13,8 @@ class YHFourKingViewController: YHBaseViewController { ...@@ -13,7 +13,8 @@ class YHFourKingViewController: YHBaseViewController {
var tableFootView: YHServiceTableFootView! var tableFootView: YHServiceTableFootView!
var sectionView: YHServiceSectionView! var sectionView: YHServiceSectionView!
var id = 3 var id = 3
var classId: Int = 0
var dataSouce: [YHHomeListModel?] = [] { var dataSouce: [YHHomeListModel?] = [] {
didSet { didSet {
self.homeTableView.reloadData() self.homeTableView.reloadData()
...@@ -55,7 +56,8 @@ extension YHFourKingViewController { ...@@ -55,7 +56,8 @@ extension YHFourKingViewController {
gk_navTitle = model.name gk_navTitle = model.name
self.sectionView.items = model.children self.sectionView.items = model.children
let classifyID = model.children.first?.id ?? 0 let classifyID = model.children.first?.id ?? 0
self.homeViewModel.getList(classifyID) {[weak self] success, error in self.classId = classifyID
self.homeViewModel.getList(true, classifyID) {[weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
self.dataSouce = self.homeViewModel.arrHomeNewsData ?? [] self.dataSouce = self.homeViewModel.arrHomeNewsData ?? []
} }
...@@ -71,9 +73,13 @@ extension YHFourKingViewController { ...@@ -71,9 +73,13 @@ extension YHFourKingViewController {
let view = YHServiceSectionView() let view = YHServiceSectionView()
view.block = {[weak self] model in view.block = {[weak self] model in
guard let self = self else { return } guard let self = self else { return }
self.homeViewModel.getList(model.id) {[weak self] success, error in self.classId = model.id
self.homeViewModel.getList(true, model.id) {[weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
self.dataSouce = self.homeViewModel.arrHomeNewsData ?? [] self.dataSouce = self.homeViewModel.arrHomeNewsData ?? []
if self.homeViewModel.hasMoreForHomeNews == false {
self.homeTableView.es.noticeNoMoreData()
}
} }
} }
return view return view
...@@ -87,6 +93,18 @@ extension YHFourKingViewController { ...@@ -87,6 +93,18 @@ extension YHFourKingViewController {
} }
homeTableView.delegate = self homeTableView.delegate = self
homeTableView.dataSource = self homeTableView.dataSource = self
homeTableView.es.addInfiniteScrolling {[weak self] in
guard let self = self else { return }
self.homeViewModel.getList(false, self.classId) {[weak self] success, error in
guard let self = self else { return }
self.dataSouce = self.homeViewModel.arrHomeNewsData ?? []
self.homeTableView.es.stopLoadingMore()
if self.homeViewModel.hasMoreForHomeNews == false {
self.homeTableView.es.noticeNoMoreData()
}
}
}
} }
} }
......
...@@ -10,25 +10,46 @@ import UIKit ...@@ -10,25 +10,46 @@ import UIKit
class YHSearchInfomationVC: YHBaseViewController { class YHSearchInfomationVC: YHBaseViewController {
static let searchInfoHistoryKey = "searchInfoHistoryKey"
static let searchHistoryMaxCount = 10
var items:[YHHomeListModel] = [] var items:[YHHomeListModel] = []
lazy var viewModel : YHHomePageViewModel = { lazy var viewModel: YHHomePageViewModel = {
let viewModel = YHHomePageViewModel() let viewModel = YHHomePageViewModel()
return viewModel return viewModel
}() }()
lazy var navBar:UIView = {
let bar = UIView()
let backBtn = UIButton()
backBtn.setImage(UIImage(named: "back_icon"), for: .normal)
backBtn.addTarget(self, action: #selector(didBackBtnClicked), for: .touchUpInside)
backBtn.YH_clickEdgeInsets = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
bar.addSubview(backBtn)
backBtn.snp.makeConstraints { make in
make.width.height.equalTo(21)
make.centerY.equalToSuperview()
make.left.equalToSuperview().offset(16)
}
return bar
}()
lazy var searchBar: YHSearchInfoBar = { lazy var searchBar: YHSearchInfoBar = {
let bar = YHSearchInfoBar(frame: CGRect(x: 20, y: k_Height_NavigationtBarAndStatuBar+8.0, width: KScreenWidth-40, height: 36.0)) let bar = YHSearchInfoBar(frame: CGRect(x: 20, y: k_Height_NavigationtBarAndStatuBar+8.0, width: KScreenWidth-40, height: 36.0))
bar.searchBlock = { bar.searchBlock = {
[weak self] text in [weak self] text in
guard let self = self else { return } guard let self = self else { return }
searchText(self.searchBar.textField.text ?? "") searchText(self.searchBar.textField.text ?? "")
if let searchText = self.searchBar.textField.text, searchText.count > 0 {
self.saveSearchHistory(searchText)
}
} }
bar.textChange = { bar.textChange = {
[weak self] text in [weak self] text in
guard let self = self else { return } guard let self = self else { return }
if isEmptyString(text) { if isEmptyString(text) {
searchHistoryView.isHidden = false searchHistoryView.isHidden = false
searchHistoryView.updateDataSource(self.getSearchHistoryList())
items.removeAll() items.removeAll()
self.tableView.reloadData() self.tableView.reloadData()
} }
...@@ -57,12 +78,14 @@ class YHSearchInfomationVC: YHBaseViewController { ...@@ -57,12 +78,14 @@ class YHSearchInfomationVC: YHBaseViewController {
lazy var searchHistoryView: YHSearchInfoHistoryView = { lazy var searchHistoryView: YHSearchInfoHistoryView = {
let view = YHSearchInfoHistoryView(frame: CGRect(x: 0, y: searchBar.frame.maxY+8, width: KScreenWidth, height: KScreenHeight-searchBar.frame.maxY-8)) let view = YHSearchInfoHistoryView(frame: CGRect(x: 0, y: searchBar.frame.maxY+8, width: KScreenWidth, height: KScreenHeight-searchBar.frame.maxY-8))
view.updateDataSource(self.getSearchHistoryList())
view.selectBlock = { view.selectBlock = {
[weak self] text in [weak self] text in
guard let self = self else { return } guard let self = self else { return }
self.searchHistoryView.isHidden = true self.searchHistoryView.isHidden = true
self.searchBar.textField.text = text self.searchBar.textField.text = text
searchText(text) searchText(text)
self.saveSearchHistory(text)
} }
return view return view
}() }()
...@@ -97,12 +120,25 @@ class YHSearchInfomationVC: YHBaseViewController { ...@@ -97,12 +120,25 @@ class YHSearchInfomationVC: YHBaseViewController {
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
self.setupUI()
}
func setupUI() {
gk_navigationBar.isHidden = true
view.backgroundColor = .white view.backgroundColor = .white
view.addSubview(navBar)
view.addSubview(searchBar) view.addSubview(searchBar)
view.addSubview(tableView) view.addSubview(tableView)
view.addSubview(searchHistoryView) view.addSubview(searchHistoryView)
searchBar.textField.becomeFirstResponder() searchBar.textField.becomeFirstResponder()
navBar.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalToSuperview().offset(k_Height_statusBar())
make.height.equalTo(k_Height_NavContentBar)
}
searchBar.snp.makeConstraints { make in searchBar.snp.makeConstraints { make in
make.left.equalToSuperview().offset(20) make.left.equalToSuperview().offset(20)
make.right.equalToSuperview().offset(-20) make.right.equalToSuperview().offset(-20)
...@@ -138,6 +174,46 @@ class YHSearchInfomationVC: YHBaseViewController { ...@@ -138,6 +174,46 @@ class YHSearchInfomationVC: YHBaseViewController {
self.tableView.reloadData() self.tableView.reloadData()
} }
} }
func getSearchHistoryList() -> [String] {
if let arr = UserDefaults.standard.array(forKey: Self.searchInfoHistoryKey) as? [String] {
return arr
}
return []
}
func saveSearchHistory(_ text: String) {
if isEmptyString(text) { return }
var arr = getSearchHistoryList()
// 查找历史记录中是否有相同记录
var targetIndex = -1
for (index, history) in arr.enumerated() {
if history == text {
targetIndex = index
break
}
}
// 去除相同记录
if 0 <= targetIndex && targetIndex < arr.count {
arr.remove(at: targetIndex)
}
// 将最近记录放在第一位
if arr.count < Self.searchHistoryMaxCount {
arr.insert(text, at: 0)
} else {
arr.insert(text, at: 0)
arr.removeLast()
}
UserDefaults.standard.set(arr, forKey: Self.searchInfoHistoryKey)
UserDefaults.standard.synchronize()
}
@objc func didBackBtnClicked() {
self.navigationController?.popViewController(animated: true)
}
} }
extension YHSearchInfomationVC: UITableViewDelegate, UITableViewDataSource { extension YHSearchInfomationVC: UITableViewDelegate, UITableViewDataSource {
...@@ -157,6 +233,7 @@ extension YHSearchInfomationVC: UITableViewDelegate, UITableViewDataSource { ...@@ -157,6 +233,7 @@ extension YHSearchInfomationVC: UITableViewDelegate, UITableViewDataSource {
if 0 <= indexPath.section && indexPath.section < items.count { if 0 <= indexPath.section && indexPath.section < items.count {
let item = items[indexPath.section] let item = items[indexPath.section]
cell.updateModel(item) cell.updateModel(item)
cell.renderHighLightText(self.searchBar.textField.text ?? "")
} }
return cell return cell
} }
......
...@@ -12,7 +12,7 @@ import Kingfisher ...@@ -12,7 +12,7 @@ import Kingfisher
class YHSearchInfoCell: UITableViewCell { class YHSearchInfoCell: UITableViewCell {
static let cellReuseIdentifier = "YHSearchInfoCell" static let cellReuseIdentifier = "YHSearchInfoCell"
var model: YHHomeListModel = YHHomeListModel()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier) super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI() setupUI()
...@@ -48,6 +48,7 @@ class YHSearchInfoCell: UITableViewCell { ...@@ -48,6 +48,7 @@ class YHSearchInfoCell: UITableViewCell {
}() }()
func updateModel(_ model: YHHomeListModel) { func updateModel(_ model: YHHomeListModel) {
self.model = model
titleLabel.text = model.title titleLabel.text = model.title
videoPlayImgView.isHidden = (model.type != 1) videoPlayImgView.isHidden = (model.type != 1)
if let url = URL(string: model.img_url) { if let url = URL(string: model.img_url) {
...@@ -80,24 +81,38 @@ class YHSearchInfoCell: UITableViewCell { ...@@ -80,24 +81,38 @@ class YHSearchInfoCell: UITableViewCell {
} }
} }
func highlightText(in text: String, highlightString: String, highlightColor: UIColor) -> NSAttributedString { func renderHighLightText(_ text: String) {
let attributedString = NSMutableAttributedString(string: text)
var attributedString = NSMutableAttributedString(string:self.model.title, attributes: [
.foregroundColor: UIColor(hex: 0x121A26)
])
if isEmptyString(text) {
self.titleLabel.attributedText = attributedString
return
}
// 创建一个属性字典,用于设置高亮样式 // 设置高亮样式
let highlightAttributes: [NSAttributedString.Key: Any] = [ let highlightAttributes: [NSAttributedString.Key: Any] = [
.backgroundColor: highlightColor .foregroundColor: UIColor(hex: 0x3570DC)
] ]
// 查找并应用高亮样式到指定文字 let ranges = findOccurrencesOfString(text, inString:self.model.title)
let range = (text as NSString).range(of: highlightString) for range in ranges {
attributedString.addAttributes(highlightAttributes, range: range) let changeRange = NSRange(range, in: self.model.title)
attributedString.addAttributes(highlightAttributes, range: changeRange)
return attributedString }
self.titleLabel.attributedText = attributedString
} }
func hopeless() { func findOccurrencesOfString(_ searchString: String, inString string: String) -> [Range<String.Index>] {
var occurrences: [Range<String.Index>] = []
var searchStartIndex = string.startIndex
while let range = string.range(of: searchString, options: [], range: searchStartIndex..<string.endIndex) {
occurrences.append(range)
searchStartIndex = range.upperBound
}
return occurrences
} }
} }
...@@ -10,7 +10,7 @@ import UIKit ...@@ -10,7 +10,7 @@ import UIKit
class YHSearchInfoHistoryView: UIView { class YHSearchInfoHistoryView: UIView {
var historyItems:[String] = ["阿法守法发生懂法守法阿法守法发生懂法守法阿法守法发生懂法守法阿法守法发生懂法守法", "几天萨法", "阿德", "守法", "几天萨法", "德", "阿法守法发生懂法守法", "阿德", "几天", "阿德", "守法", "几天萨法"] var historyItems:[String] = []
// var historyItems:[String] = ["几天2345", "阿", "萨法", "阿德"] // var historyItems:[String] = ["几天2345", "阿", "萨法", "阿德"]
var selectBlock:((String)->())? var selectBlock:((String)->())?
...@@ -70,6 +70,13 @@ class YHSearchInfoHistoryView: UIView { ...@@ -70,6 +70,13 @@ class YHSearchInfoHistoryView: UIView {
} }
} }
func updateDataSource(_ arr:[String]) {
historyItems.removeAll()
historyItems.append(contentsOf: arr)
self.collectionView.reloadData()
titleLabel.isHidden = arr.count <= 0
}
// 计算文字宽度大小 // 计算文字宽度大小
func getwith(font: UIFont, height: CGFloat, string: String) -> CGSize { func getwith(font: UIFont, height: CGFloat, string: String) -> CGSize {
let size = CGSize.init(width: CGFloat(MAXFLOAT), height: height) let size = CGSize.init(width: CGFloat(MAXFLOAT), height: height)
......
...@@ -20,6 +20,7 @@ class YHSearchItemLayout: UICollectionViewFlowLayout { ...@@ -20,6 +20,7 @@ class YHSearchItemLayout: UICollectionViewFlowLayout {
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
let arrCell = super.layoutAttributesForElements(in: rect) let arrCell = super.layoutAttributesForElements(in: rect)
if arrCell == nil { return nil } if arrCell == nil { return nil }
if arrCell!.count <= 1 { return arrCell }
for i in 1 ..< arrCell!.count { for i in 1 ..< arrCell!.count {
//当前 UICollectionViewLayoutAttributes //当前 UICollectionViewLayoutAttributes
let currentLayout = arrCell![i] let currentLayout = arrCell![i]
......
...@@ -147,14 +147,23 @@ extension YHHomePageViewModel { ...@@ -147,14 +147,23 @@ extension YHHomePageViewModel {
} }
} }
func getList(_ classifyID: Int, callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) { func getList(_ firstPageFlag : Bool, _ classifyID: Int, callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) {
let params: [String : Any] = ["page": 1, var params: [String : Any] = ["page": curPageIndex,
"page_size": 10, "page_size": page_Size,
"classify_id": classifyID] "classify_id[0]": classifyID]
if firstPageFlag {
curPageIndex = 1
params = ["page": curPageIndex,
"page_size": page_Size,
"classify_id[0]": classifyID]
} else {
params = ["page": curPageIndex + 1,
"page_size": page_Size,
"classify_id[0]": classifyID]
}
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Common.article let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Common.article
let _ = YHNetRequest.getRequest(url: strUrl, params: params) { [weak self] json, code in let _ = YHNetRequest.getRequest(url: strUrl, params: params) { [weak self] json, code in
guard let self = self else { return } guard let self = self else { return }
//1. json字符串 转 对象
if json.code == 200 { if json.code == 200 {
let dic = json.data let dic = json.data
guard let result = YHHomeListTotalModel.deserialize(from: dic as? Dictionary) else { guard let result = YHHomeListTotalModel.deserialize(from: dic as? Dictionary) else {
...@@ -166,14 +175,29 @@ extension YHHomePageViewModel { ...@@ -166,14 +175,29 @@ extension YHHomePageViewModel {
for item in result.data { for item in result.data {
item.calHeightParam() item.calHeightParam()
} }
self.arrHomeNewsData = result.data
if firstPageFlag {
self.totalCount = result.total
self.arrHomeNewsData = result.data
} else {
self.arrHomeNewsData?.append(contentsOf: result.data)
}
if let count = self.arrHomeNewsData?.count {
if count == self.totalCount {
self.hasMoreForHomeNews = false
} else {
self.hasMoreForHomeNews = true
}
}
callBackBlock(true, nil) callBackBlock(true, nil)
} else { } else {
self.arrHomeNewsData = []
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg) let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
callBackBlock(false, error) callBackBlock(false, error)
} }
} failBlock: { err in } failBlock: { err in
callBackBlock(false,err) callBackBlock(false,err)
} }
} }
...@@ -207,7 +231,7 @@ extension YHHomePageViewModel { ...@@ -207,7 +231,7 @@ extension YHHomePageViewModel {
"page_size": 10, "page_size": 10,
"title": title] "title": title]
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Common.article let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Common.article
let _ = YHNetRequest.getRequest(url: strUrl) { [weak self] json, code in let _ = YHNetRequest.getRequest(url: strUrl, params: params) { [weak self] json, code in
guard let self = self else { return } guard let self = self else { return }
//1. json字符串 转 对象 //1. json字符串 转 对象
if json.code == 200 { if json.code == 200 {
......
...@@ -14,7 +14,7 @@ class YHServerHKLifeViewController: YHBaseViewController { ...@@ -14,7 +14,7 @@ class YHServerHKLifeViewController: YHBaseViewController {
var tableHeadView: YHServerTableHeadView! var tableHeadView: YHServerTableHeadView!
var tableFootView: YHServiceTableFootView! var tableFootView: YHServiceTableFootView!
var sectionView: YHServiceSectionView! var sectionView: YHServiceSectionView!
var classId: Int = 0
var dataSouce: [YHHomeListModel?] = [] { var dataSouce: [YHHomeListModel?] = [] {
didSet { didSet {
self.homeTableView.reloadData() self.homeTableView.reloadData()
...@@ -61,9 +61,13 @@ extension YHServerHKLifeViewController { ...@@ -61,9 +61,13 @@ extension YHServerHKLifeViewController {
if model.id == 2 { if model.id == 2 {
self.sectionView.items = model.children self.sectionView.items = model.children
let classifyID = model.children.first?.id ?? 0 let classifyID = model.children.first?.id ?? 0
self.homeViewModel.getList(classifyID) {[weak self] success, error in self.classId = classifyID
self.homeViewModel.getList(true, classifyID) {[weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
self.dataSouce = self.homeViewModel.arrHomeNewsData ?? [] self.dataSouce = self.homeViewModel.arrHomeNewsData ?? []
if self.homeViewModel.hasMoreForHomeNews == false {
self.homeTableView.es.noticeNoMoreData()
}
} }
} }
} }
...@@ -78,9 +82,13 @@ extension YHServerHKLifeViewController { ...@@ -78,9 +82,13 @@ extension YHServerHKLifeViewController {
let view = YHServiceSectionView() let view = YHServiceSectionView()
view.block = {[weak self] model in view.block = {[weak self] model in
guard let self = self else { return } guard let self = self else { return }
self.homeViewModel.getList(model.id) {[weak self] success, error in self.classId = model.id
self.homeViewModel.getList(true, model.id) {[weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
self.dataSouce = self.homeViewModel.arrHomeNewsData ?? [] self.dataSouce = self.homeViewModel.arrHomeNewsData ?? []
if self.homeViewModel.hasMoreForHomeNews == false {
self.homeTableView.es.noticeNoMoreData()
}
} }
} }
return view return view
...@@ -88,8 +96,6 @@ extension YHServerHKLifeViewController { ...@@ -88,8 +96,6 @@ extension YHServerHKLifeViewController {
tableHeadView = YHServerTableHeadView() tableHeadView = YHServerTableHeadView()
tableHeadView.frame = CGRect(x: 0, y: 0, width: KScreenWidth, height: 365) tableHeadView.frame = CGRect(x: 0, y: 0, width: KScreenWidth, height: 365)
// tableFootView = YHServiceTableFootView()
// tableFootView.frame = CGRect(x: 0, y: 0, width: KScreenWidth, height: KScreenHeight)
view.addSubview(homeTableView) view.addSubview(homeTableView)
homeTableView.tableHeaderView = tableHeadView homeTableView.tableHeaderView = tableHeadView
homeTableView.tableFooterView = tableFootView homeTableView.tableFooterView = tableFootView
...@@ -99,6 +105,17 @@ extension YHServerHKLifeViewController { ...@@ -99,6 +105,17 @@ extension YHServerHKLifeViewController {
} }
homeTableView.delegate = self homeTableView.delegate = self
homeTableView.dataSource = self homeTableView.dataSource = self
homeTableView.es.addInfiniteScrolling {[weak self] in
guard let self = self else { return }
self.homeTableView.es.stopLoadingMore()
self.homeViewModel.getList(false, self.classId) {[weak self] success, error in
guard let self = self else { return }
self.dataSouce = self.homeViewModel.arrHomeNewsData ?? []
if self.homeViewModel.hasMoreForHomeNews == false {
self.homeTableView.es.noticeNoMoreData()
}
}
}
} }
} }
......
...@@ -16,7 +16,7 @@ class YHServiceListViewController: YHBaseViewController { ...@@ -16,7 +16,7 @@ class YHServiceListViewController: YHBaseViewController {
var orderListView: YHOrderListView! var orderListView: YHOrderListView!
var normalView: YHServerNoOrderView! var normalView: YHServerNoOrderView!
var classId: Int = 0
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
setupUI() setupUI()
...@@ -45,9 +45,13 @@ extension YHServiceListViewController { ...@@ -45,9 +45,13 @@ extension YHServiceListViewController {
if model.id == 1 { if model.id == 1 {
self.normalView.sectionView.items = model.children self.normalView.sectionView.items = model.children
let classifyID = model.children.first?.id ?? 0 let classifyID = model.children.first?.id ?? 0
self.homeViewModel.getList(classifyID) {[weak self] success, error in self.classId = classifyID
self.homeViewModel.getList(true, classifyID) {[weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
self.normalView.dataSouce = self.homeViewModel.arrHomeNewsData ?? [] self.normalView.dataSouce = self.homeViewModel.arrHomeNewsData ?? []
if self.homeViewModel.hasMoreForHomeNews == false {
self.normalView.homeTableView.es.noticeNoMoreData()
}
} }
} }
} }
...@@ -87,9 +91,23 @@ extension YHServiceListViewController { ...@@ -87,9 +91,23 @@ extension YHServiceListViewController {
let view = YHServerNoOrderView() let view = YHServerNoOrderView()
view.sectionBlock = {[weak self] model in view.sectionBlock = {[weak self] model in
guard let self = self else { return } guard let self = self else { return }
self.homeViewModel.getList(model.id) {[weak self] success, error in self.classId = model.id
self.homeViewModel.getList(true, model.id) {[weak self] success, error in
guard let self = self else { return }
self.normalView.dataSouce = self.homeViewModel.arrHomeNewsData ?? []
if self.homeViewModel.hasMoreForHomeNews == false {
self.normalView.homeTableView.es.noticeNoMoreData()
}
}
}
view.loadMoreBlock = {[weak self] model in
guard let self = self else { return }
self.homeViewModel.getList(false, self.classId) {[weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
self.normalView.dataSouce = self.homeViewModel.arrHomeNewsData ?? [] self.normalView.dataSouce = self.homeViewModel.arrHomeNewsData ?? []
if self.homeViewModel.hasMoreForHomeNews == false {
self.normalView.homeTableView.es.noticeNoMoreData()
}
} }
} }
return view return view
......
...@@ -11,6 +11,7 @@ import UIKit ...@@ -11,6 +11,7 @@ import UIKit
class YHServerNoOrderView: UIView { class YHServerNoOrderView: UIView {
typealias SectionBlock = (YHClassifyModel) -> () typealias SectionBlock = (YHClassifyModel) -> ()
var sectionBlock: SectionBlock? var sectionBlock: SectionBlock?
var loadMoreBlock: SectionBlock?
var tableHeadView: YHServerTableHeadView! var tableHeadView: YHServerTableHeadView!
var sectionView: YHServiceSectionView! var sectionView: YHServiceSectionView!
...@@ -66,6 +67,14 @@ class YHServerNoOrderView: UIView { ...@@ -66,6 +67,14 @@ class YHServerNoOrderView: UIView {
} }
homeTableView.delegate = self homeTableView.delegate = self
homeTableView.dataSource = self homeTableView.dataSource = self
homeTableView.es.addInfiniteScrolling {[weak self] in
guard let self = self else { return }
self.homeTableView.es.stopLoadingMore()
if let block = self.loadMoreBlock {
block(YHClassifyModel())
}
}
} }
} }
......
...@@ -31,6 +31,8 @@ class YHServerTableHeadView: UIView { ...@@ -31,6 +31,8 @@ class YHServerTableHeadView: UIView {
func setUpView() { func setUpView() {
search = { search = {
let view = YHHomeSearchView() let view = YHHomeSearchView()
let tap = UITapGestureRecognizer(target: self, action: #selector(didSearchBarClicked))
view.addGestureRecognizer(tap)
return view return view
}() }()
addSubview(search) addSubview(search)
...@@ -76,4 +78,9 @@ class YHServerTableHeadView: UIView { ...@@ -76,4 +78,9 @@ class YHServerTableHeadView: UIView {
@objc func goNext() { @objc func goNext() {
UIViewController.current?.navigationController?.pushViewController(YHScoreDetailViewController()) UIViewController.current?.navigationController?.pushViewController(YHScoreDetailViewController())
} }
@objc func didSearchBarClicked() {
let vc = YHSearchInfomationVC()
UIViewController.current?.navigationController?.pushViewController(vc)
}
} }
...@@ -77,6 +77,27 @@ private extension YHServiceBannerView { ...@@ -77,6 +77,27 @@ private extension YHServiceBannerView {
self.pageControl.interitemSpacing = 3 self.pageControl.interitemSpacing = 3
} }
func goAppTab(tabBarName : String) {
if !tabBarName.isEmpty {
if tabBarName.contains("tabBarHome",caseSensitive: false) {
//首页
goTabBarBy(tabType: .home)
} else if tabBarName.contains("tabBarService",caseSensitive: false) {
//服务中心
goTabBarBy(tabType: .service)
} else if tabBarName.contains("tabBarMsg",caseSensitive: false) {
//消息
goTabBarBy(tabType: .message)
} else if tabBarName.contains("tabBarMine",caseSensitive: false) {
//我的
goTabBarBy(tabType: .mine)
} else {
}
}
}
} }
extension YHServiceBannerView: FSPagerViewDataSource, FSPagerViewDelegate { extension YHServiceBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
...@@ -94,7 +115,7 @@ extension YHServiceBannerView: FSPagerViewDataSource, FSPagerViewDelegate { ...@@ -94,7 +115,7 @@ extension YHServiceBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
if let url = URL(string: model.img_url) { if let url = URL(string: model.img_url) {
cell.imageView?.kf.setImage(with: url) cell.imageView?.kf.setImage(with: url)
} }
cell.textLabel?.text = model.name // cell.textLabel?.text = model.name
} }
cell.imageView?.contentMode = .scaleAspectFill cell.imageView?.contentMode = .scaleAspectFill
cell.backgroundColor = .contentBkgColor cell.backgroundColor = .contentBkgColor
...@@ -112,19 +133,26 @@ extension YHServiceBannerView: FSPagerViewDataSource, FSPagerViewDelegate { ...@@ -112,19 +133,26 @@ extension YHServiceBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
return return
} }
let model = dataArr[index] let model = dataArr[index]
switch model.type { if model.skip_url.isEmpty == false {
case 10: //跳转H5 switch model.skip_type {
// let vc = BsWebViewController() case 1: //跳转H5
// vc.urlString = model.link_url let vc = YHHomeWebViewController()
// UIViewController.navTopViewController?.navigationController?.pushViewController(vc, animated: true) vc.url = model.skip_url
break self.parentViewController?.navigationController?.pushViewController(vc)
case 20: //跳转原生页面 case 2: //跳转APP内Tab
if let vc = UIViewController.classFromString(model.skip_url) { goAppTab(tabBarName:model.skip_url)
UIViewController.navTopViewController?.navigationController?.pushViewController(vc, animated: true) case 3://3-跳转资讯页
let vc = YHHomeWebViewController()
vc.url = model.skip_url
self.parentViewController?.navigationController?.pushViewController(vc)
case 0://0 不需要跳转
printLog("0 不需要跳转")
default:
YHHUD.flash(message: "不需要处理的类型")
break
} }
break } else {
default: YHHUD.flash(message: "error:skip_url不能为空")
break
} }
} }
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
import UIKit import UIKit
class YHServiceTableFootView: UIView { class YHServiceTableFootView: UIView {
typealias LoadBlock = () -> ()
var moreBlock: LoadBlock?
var items:[YHHomeListModel?] = [] { var items:[YHHomeListModel?] = [] {
didSet { didSet {
...@@ -49,6 +51,13 @@ class YHServiceTableFootView: UIView { ...@@ -49,6 +51,13 @@ class YHServiceTableFootView: UIView {
myCollectView.snp.makeConstraints { make in myCollectView.snp.makeConstraints { make in
make.top.left.right.bottom.equalToSuperview() make.top.left.right.bottom.equalToSuperview()
} }
myCollectView.es.addInfiniteScrolling {[weak self] in
guard let self = self else { return }
if let block = moreBlock {
block ()
}
}
} }
} }
......
...@@ -42,14 +42,20 @@ class YHMyLikeViewController: YHBaseViewController { ...@@ -42,14 +42,20 @@ class YHMyLikeViewController: YHBaseViewController {
extension YHMyLikeViewController { extension YHMyLikeViewController {
func loadData() { func loadData() {
if id == 1 || id == 2 { if id == 1 || id == 2 {
self.viewModel.getList(id) {[weak self] success, error in self.viewModel.getList(true ,id) {[weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
self.dataSouce = self.viewModel.arrHomeNewsData ?? [] self.dataSouce = self.viewModel.arrHomeNewsData ?? []
if self.viewModel.hasMoreForHomeNews == false {
self.tableFootView.myCollectView.es.noticeNoMoreData()
}
} }
} else { } else {
self.viewModel.getList(callBackBlock: {[weak self] success, error in self.viewModel.getList(true, callBackBlock: {[weak self] success, error in
guard let self = self else { return } guard let self = self else { return }
self.dataSouce = self.viewModel.arrHomeNewsData ?? [] self.dataSouce = self.viewModel.arrHomeNewsData ?? []
if self.viewModel.hasMoreForHomeNews == false {
self.tableFootView.myCollectView.es.noticeNoMoreData()
}
}) })
} }
} }
...@@ -59,6 +65,28 @@ extension YHMyLikeViewController { ...@@ -59,6 +65,28 @@ extension YHMyLikeViewController {
tableFootView = { tableFootView = {
let view = YHServiceTableFootView() let view = YHServiceTableFootView()
view.moreBlock = {[weak self] in
guard let self = self else { return }
if id == 1 || id == 2 {
self.tableFootView.myCollectView.es.stopLoadingMore()
self.viewModel.getList(false ,id) {[weak self] success, error in
guard let self = self else { return }
self.dataSouce = self.viewModel.arrHomeNewsData ?? []
if self.viewModel.hasMoreForHomeNews == false {
self.tableFootView.myCollectView.es.noticeNoMoreData()
}
}
} else {
self.tableFootView.myCollectView.es.stopLoadingMore()
self.viewModel.getList(false, callBackBlock: {[weak self] success, error in
guard let self = self else { return }
self.dataSouce = self.viewModel.arrHomeNewsData ?? []
if self.viewModel.hasMoreForHomeNews == false {
self.tableFootView.myCollectView.es.noticeNoMoreData()
}
})
}
}
return view return view
}() }()
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
// //
import UIKit import UIKit
import Photos
enum YHPermissionType: Int { enum YHPermissionType: Int {
case none = 0 case none = 0
...@@ -31,11 +32,9 @@ class YHPermissionItem { ...@@ -31,11 +32,9 @@ class YHPermissionItem {
class YHMyPermissionSettingVC: YHBaseViewController { class YHMyPermissionSettingVC: YHBaseViewController {
var items:[YHPermissionItem] = [YHPermissionItem(title: "网络".local, type:.network, enableStatus: true), let items:[YHPermissionItem] = [YHPermissionItem(title: "网络".local, type:.network, enableStatus: YHNetworkStatusManager.shared.isNetWorkOK),
YHPermissionItem(title: "照片".local, type:.photo, enableStatus: true), YHPermissionItem(title: "照片".local, type:.photo, enableStatus: false),
YHPermissionItem(title: "相机".local, type:.camera, enableStatus: false), YHPermissionItem(title: "相机".local, type:.camera, enableStatus: false)]
YHPermissionItem(title: "位置".local, type:.location, enableStatus: true),
YHPermissionItem(title: "文件".local, type:.file, enableStatus: false)]
lazy var tableView: UITableView = { lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped) let tableView = UITableView(frame:.zero, style:.grouped)
...@@ -64,6 +63,72 @@ class YHMyPermissionSettingVC: YHBaseViewController { ...@@ -64,6 +63,72 @@ class YHMyPermissionSettingVC: YHBaseViewController {
make.top.equalToSuperview().offset(k_Height_NavigationtBarAndStatuBar) make.top.equalToSuperview().offset(k_Height_NavigationtBarAndStatuBar)
make.bottom.equalToSuperview().offset(-k_Height_TabBar) make.bottom.equalToSuperview().offset(-k_Height_TabBar)
} }
// 获取相册权限
requestPhotoLibraryPermission {
[weak self] grant in
guard let self = self else { return }
for item in items {
if item.type == .photo {
item.enableStatus = grant
self.tableView.reloadData()
}
}
}
// 获取相机权限
requestCameraPermission {
[weak self] grant in
guard let self = self else { return }
for item in items {
if item.type == .camera {
item.enableStatus = grant
self.tableView.reloadData()
}
}
}
}
func requestPhotoLibraryPermission(completion: @escaping (Bool) -> Void) {
let status = PHPhotoLibrary.authorizationStatus()
switch status {
case .authorized:
// 已经授权
completion(true)
case .denied, .restricted, .limited:
// 拒绝或受限制,需要提示用户去设置中授权
completion(false)
case .notDetermined:
// 尚未确定,请求授权
completion(false)
@unknown default:
completion(false)
}
}
func requestCameraPermission(completion: @escaping (Bool) -> Void) {
let status = AVCaptureDevice.authorizationStatus(for: .video)
switch status {
case .authorized:
// 已经授权
completion(true)
case .denied, .restricted:
// 拒绝或受限制,需要提示用户去设置中授权
completion(false)
case .notDetermined:
// 尚未确定,请求授权
completion(false)
@unknown default:
completion(false)
}
} }
} }
...@@ -88,27 +153,12 @@ extension YHMyPermissionSettingVC: UITableViewDelegate, UITableViewDataSource { ...@@ -88,27 +153,12 @@ extension YHMyPermissionSettingVC: UITableViewDelegate, UITableViewDataSource {
} }
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if 0 <= indexPath.row && indexPath.row < items.count {
let item = items[indexPath.row]
if item.type == .photo || item.type == .camera { let url = URL(string: UIApplication.openSettingsURLString)
let url = URL(string: UIApplication.openSettingsURLString) if let url = url, UIApplication .shared.canOpenURL(url) {
if let url = url, UIApplication .shared.canOpenURL(url) { UIApplication .shared.open(url, options: [:], completionHandler: {
UIApplication .shared.open(url, options: [:], completionHandler: { (success) in
(success) in })
})
}
return
}
if item.type == .location {
if let url = URL(string: "App-prefs:Photos") {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
} else if item.type == .file {
}
} }
} }
......
...@@ -10,16 +10,31 @@ import UIKit ...@@ -10,16 +10,31 @@ import UIKit
class YHMyLikeViewModel: YHBaseViewModel { class YHMyLikeViewModel: YHBaseViewModel {
var arrHomeNewsData: [YHHomeListModel]? var arrHomeNewsData: [YHHomeListModel]?
private var curPageIndex : Int = 1
private var page_Size : Int = 10
private var totalCount : Int = 0
var hasMoreForHomeNews : Bool = true
} }
extension YHMyLikeViewModel { extension YHMyLikeViewModel {
// 1点赞 2收藏 // 1点赞 2收藏
func getList(_ type: Int, callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) { func getList(_ firstPageFlag : Bool, _ type: Int, callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) {
let params: [String : Any] = ["page": 1, var params: [String : Any] = ["page": curPageIndex,
"page_size": 10, "page_size": page_Size,
"operate_type": type] "operate_type": type]
if firstPageFlag {
curPageIndex = 1
params = ["page": curPageIndex,
"page_size": page_Size,
"operate_type": type]
} else {
params = ["page": curPageIndex + 1,
"page_size": page_Size,
"operate_type": type]
}
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Common.user let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Common.user
let _ = YHNetRequest.getRequest(url: strUrl) { [weak self] json, code in let _ = YHNetRequest.getRequest(url: strUrl, params: params) { [weak self] json, code in
guard let self = self else { return } guard let self = self else { return }
//1. json字符串 转 对象 //1. json字符串 转 对象
if json.code == 200 { if json.code == 200 {
...@@ -33,9 +48,25 @@ extension YHMyLikeViewModel { ...@@ -33,9 +48,25 @@ extension YHMyLikeViewModel {
for item in result.data { for item in result.data {
item.calHeightParam() item.calHeightParam()
} }
self.arrHomeNewsData = result.data
if firstPageFlag {
self.totalCount = result.total
self.arrHomeNewsData = result.data
} else {
self.arrHomeNewsData?.append(contentsOf: result.data)
}
if let count = self.arrHomeNewsData?.count {
if count == self.totalCount {
self.hasMoreForHomeNews = false
} else {
self.hasMoreForHomeNews = true
}
}
callBackBlock(true, nil) callBackBlock(true, nil)
} else { } else {
self.arrHomeNewsData = []
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg) let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
callBackBlock(false, error) callBackBlock(false, error)
} }
...@@ -45,11 +76,19 @@ extension YHMyLikeViewModel { ...@@ -45,11 +76,19 @@ extension YHMyLikeViewModel {
} }
//最近浏览 //最近浏览
func getList(callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) { func getList(_ firstPageFlag : Bool, callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) {
let params: [String : Any] = ["page": 1, var params: [String : Any] = ["page": curPageIndex,
"page_size": 10] "page_size": page_Size]
if firstPageFlag {
curPageIndex = 1
params = ["page": curPageIndex,
"page_size": page_Size]
} else {
params = ["page": curPageIndex + 1,
"page_size": page_Size]
}
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Common.userLook let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Common.userLook
let _ = YHNetRequest.getRequest(url: strUrl) { [weak self] json, code in let _ = YHNetRequest.getRequest(url: strUrl, params: params) { [weak self] json, code in
guard let self = self else { return } guard let self = self else { return }
//1. json字符串 转 对象 //1. json字符串 转 对象
if json.code == 200 { if json.code == 200 {
...@@ -63,9 +102,25 @@ extension YHMyLikeViewModel { ...@@ -63,9 +102,25 @@ extension YHMyLikeViewModel {
for item in result.data { for item in result.data {
item.calHeightParam() item.calHeightParam()
} }
self.arrHomeNewsData = result.data
if firstPageFlag {
self.totalCount = result.total
self.arrHomeNewsData = result.data
} else {
self.arrHomeNewsData?.append(contentsOf: result.data)
}
if let count = self.arrHomeNewsData?.count {
if count == self.totalCount {
self.hasMoreForHomeNews = false
} else {
self.hasMoreForHomeNews = true
}
}
callBackBlock(true, nil) callBackBlock(true, nil)
} else { } else {
self.arrHomeNewsData = []
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg) let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
callBackBlock(false, error) callBackBlock(false, error)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment