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)
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 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 - 画图 - 画矩形,虚线,圆和半圆