随笔 - 400,  文章 - 0,  评论 - 7,  阅读 - 21万

 

               var tempArr : [ SettleTrialMoreAlertModel ] = []

                    arr.forEach { model in

                        var alertModel = SettleTrialMoreAlertModel()

                        alertModel.showStr = model.caseNumber ?? ""

                        tempArr.append(alertModel)

                    }

单选

                   let alert = SettleTrialMoreAlertView()

                    alert.updateData(arr: tempArr, type: .single, titleStr: "请选择合同")

                    alert.singleHandle = {(index, showStr) in

                     }

                    alert.jk_showInWindow(with: JKCustomAnimationMode.share, in: self?.view, bgAlpha: 0.6, needEffectView: false)

==========================================================================================

多选

                let alert = SettleTrialMoreAlertView()

                alert.updateData(arr: list, type: .more, titleStr: "请选择车辆(多选)")

                alert.moreHandle = {(arr:[Int], showArr:[String]) in

                }

                alert.jk_showInWindow(with: JKCustomAnimationMode.share, in: self?.view, bgAlpha: 0.6, needEffectView: false)

 

 

 

==========================================================================================

实现界面

import UIKit

 

enum SettleTrialMoreAlertType {

    case single

    case more

}

 

struct SettleTrialMoreAlertModel {

    var showStr:String = ""

    var isSelected : Bool = false

}

 

class SettleTrialMoreAlertView: UIView {

 

    private lazy var searchBar:UISearchBar = {

        let searchBar = UISearchBar()

        searchBar.placeholder = "请输入搜索内容"

        searchBar.delegate = self

        searchBar.layer.cornerRadius = 5

        //去掉上下阴影下划线

        searchBar.layer.borderWidth = 1

        searchBar.layer.borderColor = UIColor.white.cgColor

 

        return searchBar

    }()

    private lazy var searchArr : [SettleTrialMoreAlertModel] = []

    

    var singleHandle:((_ selectedIndex:Int, _ showStr:String)->())?

    var moreHandle:((_ selectedArr:[Int], _ showStrArr:[String])->())?

    private lazy var type:SettleTrialMoreAlertType = .single

    private lazy var dataArr : [SettleTrialMoreAlertModel] = []

    

    

    private lazy var leftTitleLabel:UILabel = {

        let lab = GHUIModel.creatLabe(text:"选择合同", font: UIFont.systemFont(ofSize: 15, weight: UIFont.Weight.regular), textColor: UIColor.black, textAlignment: NSTextAlignment.center)

        return lab

    }()

    

    private lazy var doneBtn:UIButton = {

        let btn = GHUIModel.createBtn(font: UIFont.systemFont(ofSize: 15, weight: UIFont.Weight.regular), textColor: UIColor.blue, titleStr: "完成")

        btn.rx.tap.subscribe {[weak self] _ in

            self?.endEditing(true)

//            self?.jk_hide()

            if let _self = self{

                _self.jk_hide()

                var tempArr :[Int] = []

                var showArr:[String] = []

                if _self.type == .more{

                    for (index, tempModel) in _self.dataArr.enumerated(){

                        if tempModel.isSelected{

                            tempArr.append(index)

                            showArr.append(tempModel.showStr)

                        }

                    }

                    if(showArr.count > 0){

                        _self.moreHandle?(tempArr, showArr)

                    }

                }

            }

            

        }.disposed(by: rx.disposeBag)

 

        return btn

    }()

    

    private lazy var cancleBtn:UIButton = {

        let btn = GHUIModel.createBtn(font: UIFont.systemFont(ofSize: 15, weight: UIFont.Weight.regular), textColor: UIColor.blue, titleStr: "取消")

        btn.rx.tap.subscribe {[weak self] _ in

            self?.endEditing(true)

            self?.jk_hide()

        }.disposed(by: rx.disposeBag)

 

        return btn

    }()

 

    private lazy var cellId = "SettleTrialMoreAlertCell"

    fileprivate lazy var tv : UITableView = {

    

        let tv = GHUIModel.createTableView(style: UITableView.Style.plain, separatorStyle: UITableViewCell.SeparatorStyle.none)

        tv.register(SettleTrialMoreAlertCell.self, forCellReuseIdentifier: cellId)

        tv.showsVerticalScrollIndicator = false

        tv.showsHorizontalScrollIndicator = false

//        tv.estimatedSectionHeaderHeight = 0

//        tv.estimatedSectionFooterHeight = 0

        tv.sectionFooterHeight = 0

        tv.rowHeight = UITableView.automaticDimension

        tv.estimatedRowHeight = 50

        tv.delegate = self

        tv.dataSource = self

 

        

        return tv

    }()

    

    override init(frame: CGRect) {

        super.init(frame: frame)

        self.frame = UIScreen.main.bounds

        self.backgroundColor = UIColor.clear

        setUI()

    }

    

    required init?(coder: NSCoder) {

        fatalError("init(coder:) has not been implemented")

    }

    

    func updateData(arr:[SettleTrialMoreAlertModel], type:SettleTrialMoreAlertType, titleStr:String){

        self.type = type

        doneBtn.isHidden = type == .single ? true:false

 

        leftTitleLabel.text = titleStr

        dataArr = arr

        searchArr = arr

        tv.snp.updateConstraints { make in

//            make.height.equalTo(arr.count > 5 ? 50*5:50*arr.count)

            make.height.equalTo(GHScreenHeight * 0.7)

        }

        tv.reloadData()

    }

    

    private func setUI(){

        let bgView = createBgView()

        addSubview(bgView)

        bgView.snp.makeConstraints { make in

            make.left.bottom.right.equalToSuperview()

        }

    }

    

    private func createBgView() -> UIView{

        let bgView = GHUIModel.createView(bgColor: UIColor.white)

        

        [leftTitleLabel , searchBar,cancleBtn, doneBtn, tv]

            .forEach {

                bgView.addSubview($0)

            }

        leftTitleLabel.snp.makeConstraints { make in

            make.top.equalToSuperview().offset(15)

            make.left.right.equalToSuperview()

//            make.centerX.equalToSuperview()

        }

        

        cancleBtn.snp.makeConstraints { make in

            make.left.equalToSuperview()

            make.top.equalTo(leftTitleLabel.snp.bottom)

            make.height.equalTo(30)

            make.width.equalTo(60)

        }

        doneBtn.snp.makeConstraints { make in

            make.top.width.height.equalTo(cancleBtn)

            make.right.equalToSuperview()

        }

 

        

        searchBar.snp.makeConstraints { make in

            make.top.equalTo(cancleBtn.snp.bottom).offset(10)

            make.left.equalTo(12)

            make.right.equalTo(-12)

            make.height.equalTo(30)

        }

        tv.snp.makeConstraints { make in

            make.left.right.equalToSuperview()

            make.height.equalTo(100)

            make.top.equalTo(searchBar.snp.bottom).offset(10)

            make.bottom.equalTo(bgView.safeAreaLayoutGuide.snp.bottom)

        }

        return bgView

    }

}

 

extension SettleTrialMoreAlertView:UISearchBarDelegate{

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

        print(searchText)

        if searchText.isEmpty {

            searchArr = self.dataArr

        }else{

            searchArr = self.dataArr.filter{$0.showStr.contains(searchText) }

        }

        self.tv.reloadData()

    }

}

 

// MARK: - UITableViewDelegate, UITableViewDataSource

extension SettleTrialMoreAlertView:UITableViewDelegate, UITableViewDataSource{

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

//        return dataArr.count

        return searchArr.count

    }

    

    func numberOfSections(in tableView: UITableView) -> Int {

        return 1

    }

    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! SettleTrialMoreAlertCell

//        cell.updateData(model: dataArr[indexPath.row], type: self.type)

        cell.updateData(model: searchArr[indexPath.row], type: self.type)

        return cell

    }

    

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        if self.type == .single{

//            singleHandle?(indexPath.row, dataArr[indexPath.row].showStr)

            singleHandle?(indexPath.row, searchArr[indexPath.row].showStr)

            self.endEditing(true)

            self.jk_hide()

            return

        }else{

            dataArr[indexPath.row].isSelected =  !dataArr[indexPath.row].isSelected

            searchArr[indexPath.row].isSelected =  !searchArr[indexPath.row].isSelected

            tv.reloadData()

        }

    }

}

 

// ==================== 分 ==================== 割 ==================== 线 ====================

class SettleTrialMoreAlertCell: UITableViewCell {

    private lazy var selectedIV:UIImageView =  {

        let iv = GHUIModel.createImageView(name: "unchecked")///checked

        return iv

    }()

    

    private lazy var showLabel : UILabel = {

        let lab = GHUIModel.creatLabe( font: UIFont.systemFont(ofSize: 20, weight: UIFont.Weight.regular), textColor: UIColor.black, textAlignment: NSTextAlignment.left)

        

        return lab

    }()

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {

        super.init(style: style, reuseIdentifier: reuseIdentifier)

        setUI()

    }

    

    required init?(coder: NSCoder) {

        fatalError("init(coder:) has not been implemented")

    }

    

    func updateData(model:SettleTrialMoreAlertModel, type:SettleTrialMoreAlertType){

        if type == .single{

            selectedIV.isHidden = true

        }else{

            selectedIV.isHidden = false

        }

        if model.isSelected{

            selectedIV.image = UIImage.init(named: "checked")

        }else{

            selectedIV.image = UIImage.init(named: "unchecked")

        }

        showLabel.text = model.showStr

    }

    

    private func setUI(){

        [selectedIV, showLabel]

            .forEach {

                contentView.addSubview($0)

            }

        selectedIV.snp.makeConstraints { make in

            make.left.equalTo(10)

            make.height.width.equalTo(20)

        }

        showLabel.snp.makeConstraints { make in

            make.left.equalTo(selectedIV.snp.right).offset(10)

            make.right.equalToSuperview().offset(-10)

            make.centerY.equalTo(selectedIV)

            make.height.equalTo(40)

        }

    }

}

posted on   懂事长qingzZ  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2019-08-14 VTMagic 使用心得
2019-08-14 podfile 文件写法
2019-08-14 rvm 安装ruby报错
2018-08-14 图片拉伸
2018-08-14 swift - 画图 - 画矩形,虚线,圆和半圆

< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5
点击右上角即可分享
微信分享提示