//
|
// CommonAlertSheetView.swift
|
// OoProject
|
//
|
// Created by 无故事王国 on 2021/10/25.
|
//
|
|
import UIKit
|
import RxSwift
|
|
enum AlertSheetType {
|
case single
|
case img
|
}
|
// MARK: -- 【需封装此类】
|
class CommonAlertSheetView: UIView,LDNibView {
|
|
@IBOutlet weak var centerView: UIView!
|
@IBOutlet weak var tableView: UITableView!
|
@IBOutlet weak var cancelHeiCons: NSLayoutConstraint!
|
@IBOutlet weak var contentHeiCons: NSLayoutConstraint!
|
@IBOutlet weak var cancelBtn: UIButton!
|
@IBOutlet weak var completeBtn: UIButton!
|
|
|
private var handlerVC:UIViewController?
|
private var titles = [String]()
|
private var imgs:[String]? = nil
|
private var clouse:((Int,String)->Void)?
|
private var disposeBag = DisposeBag()
|
private var maxHei:CGFloat?
|
private var mutableSelect:Bool = false
|
private var mutableSelectIndex = Set<IndexPath>()
|
|
var mutableSlectClouse:(([Int],[String])->Void)?
|
|
override func awakeFromNib() {
|
super.awakeFromNib()
|
cancelHeiCons.constant = UIDevice.ld_safeEdges.bottom + 56
|
tableView.register(cellName: "CommonSheetTCell", identifier: "_CommonSheetTCell")
|
tableView.delegate = self
|
tableView.dataSource = self
|
tableView.isScrollEnabled = false
|
tableView.separatorStyle = .none
|
}
|
|
override func layoutSubviews() {
|
super.layoutSubviews()
|
centerView.ld_cornerPartWithNib(byRoundingCorners: [.topLeft,.topRight], radii: 12, size: centerView.size)
|
}
|
|
@discardableResult
|
static func show(vc:UIViewController? = nil,type:AlertSheetType,titles:[String],imgs:[String]? = nil,maxHei:CGFloat? = nil,mutableSelect:Bool = false,clouse:@escaping (Int,String)->Void,mutableClouse:(([Int],[String])->Void)? = nil)->CommonAlertSheetView{
|
let sheetView = CommonAlertSheetView.ld_loadNibView()
|
sheetView.handlerVC = vc
|
sheetView.titles = titles
|
sheetView.imgs = imgs
|
sheetView.alpha = 0
|
sheetView.clouse = clouse
|
sheetView.mutableSlectClouse = mutableClouse
|
sheetView.maxHei = maxHei
|
sheetView.completeBtn.isHidden = !mutableSelect
|
sheetView.mutableSelect = mutableSelect
|
app.window?.addSubview(sheetView)
|
sheetView.frame = app.window?.frame ?? CGRect.zero
|
if let maxH = maxHei,maxH < CGFloat(titles.count) * 56.0 {
|
sheetView.contentHeiCons.constant = maxH
|
sheetView.tableView.isScrollEnabled = true
|
}else{
|
sheetView.contentHeiCons.constant = CGFloat(titles.count) * 56.0
|
}
|
|
UIView.animate(withDuration: 0.4) {
|
sheetView.alpha = 1.0
|
sheetView.layoutIfNeeded()
|
}
|
return sheetView
|
}
|
|
@discardableResult
|
static func showWithNoCancel(vc:UIViewController? = nil,type:AlertSheetType,titles:[String],imgs:[String]? = nil,maxHei:CGFloat? = nil,mutableSelect:Bool = false,clouse:@escaping (Int,String)->Void,mutableClouse:(([Int],[String])->Void)? = nil)->CommonAlertSheetView{
|
let sheetView = CommonAlertSheetView.ld_loadNibView()
|
sheetView.handlerVC = vc
|
sheetView.titles = titles
|
sheetView.imgs = imgs
|
sheetView.alpha = 0
|
sheetView.clouse = clouse
|
sheetView.mutableSlectClouse = mutableClouse
|
sheetView.maxHei = maxHei
|
sheetView.completeBtn.isHidden = !mutableSelect
|
sheetView.mutableSelect = mutableSelect
|
app.window?.addSubview(sheetView)
|
sheetView.frame = app.window?.frame ?? CGRect.zero
|
sheetView.cancelBtn.setTitle("", for: .normal)
|
sheetView.cancelHeiCons.constant = UIDevice.ld_safeEdges.bottom
|
|
if let maxH = maxHei,maxH < CGFloat(titles.count) * 56.0 {
|
sheetView.contentHeiCons.constant = maxH
|
sheetView.tableView.isScrollEnabled = true
|
}else{
|
sheetView.contentHeiCons.constant = CGFloat(titles.count) * 56.0
|
}
|
|
UIView.animate(withDuration: 0.4) {
|
sheetView.alpha = 1.0
|
sheetView.layoutIfNeeded()
|
}
|
return sheetView
|
}
|
|
@IBAction func cancelAction(_ sender: UIButton) {
|
UIView.animate(withDuration: 0.4) {
|
self.alpha = 0
|
} completion: { _ in
|
self.removeFromSuperview()
|
}
|
}
|
|
@IBAction func completeAction(_ sender: UIButton) {
|
var title = [String]()
|
for item in mutableSelectIndex {
|
title.append(titles[item.row])
|
}
|
mutableSlectClouse?(mutableSelectIndex.map({$0.row}),title)
|
UIView.animate(withDuration: 0.4) {
|
self.alpha = 0
|
} completion: { _ in
|
self.removeFromSuperview()
|
}
|
}
|
}
|
|
extension CommonAlertSheetView:UITableViewDelegate{
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
if mutableSelect{
|
if mutableSelectIndex.contains(indexPath){
|
mutableSelectIndex.remove(indexPath)
|
}else{
|
mutableSelectIndex.insert(indexPath)
|
}
|
tableView.reloadData()
|
}
|
}
|
}
|
|
|
extension CommonAlertSheetView:UITableViewDataSource{
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
return titles.count
|
}
|
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
let cell = tableView.dequeueReusableCell(withIdentifier: "_CommonSheetTCell") as! CommonSheetTCell
|
cell.btn.setTitle(titles[indexPath.row], for: .normal)
|
if imgs != nil{
|
cell.btn.setImage(UIImage(named: imgs![indexPath.row]), for: .normal)
|
cell.btn.imagePosition = .left
|
cell.btn.spacingBetweenImageAndTitle = 6
|
}
|
|
cell.btn.isUserInteractionEnabled = !mutableSelect
|
|
if !mutableSelect{
|
cell.btn.rx.tap.subscribe { [weak self]_ in
|
self?.clouse?(indexPath.row,self?.titles[indexPath.row] ?? "")
|
UIView.animate(withDuration: 0.4) {
|
self?.alpha = 0
|
} completion: { _ in
|
self?.removeFromSuperview()
|
}
|
}.disposed(by: disposeBag)
|
}
|
|
if mutableSelect{
|
cell.selectImg.isHidden = !mutableSelectIndex.contains(indexPath)
|
}else{
|
cell.selectImg.isHidden = true
|
}
|
|
return cell
|
}
|
}
|