//
|
// MinePublishHireEditVC.swift
|
// OKProject
|
//
|
// Created by 无故事王国 on 2022/5/7.
|
// Copyright © 2022 yangwang. All rights reserved.
|
//
|
|
import UIKit
|
import QMUIKit
|
import TZImagePickerController
|
import Photos
|
|
class MinePublishHireEditVC: YYViewController {
|
|
private let cellW:Double = (ScreenWidth - 52 - 20) / 3.0
|
private let cellH:Double = ((ScreenWidth - 52 - 20) / 3.0) * 0.67
|
|
@IBOutlet weak var titleField: UITextField!
|
@IBOutlet weak var typeField: UITextField! //类别
|
@IBOutlet weak var brandField: UITextField! //商标
|
@IBOutlet weak var seatField: UITextField! //座位
|
@IBOutlet weak var displacementField: UITextField! //排量
|
@IBOutlet weak var gearsField: UITextField! //档位
|
@IBOutlet weak var takeCarIdCardField: UITextField! //取车证件
|
@IBOutlet weak var rentMoneyField: UITextField! //租金
|
@IBOutlet weak var cashPledgeField: UITextField! //押金
|
@IBOutlet weak var descTextView: QMUITextView!
|
@IBOutlet weak var imageCollecView: UICollectionView!
|
|
@IBOutlet weak var carImgsCountL: UILabel! //车辆图片数量
|
@IBOutlet weak var carVIdeoCountL: UILabel!
|
@IBOutlet weak var carImgsCollectionView: UICollectionView! // 车辆照片
|
@IBOutlet weak var carImgsCollectionHeiCons: NSLayoutConstraint!
|
@IBOutlet weak var carVideoBtn: UIButton!
|
|
|
@IBOutlet weak var contactPhoneField: QMUITextField!//联系人电话
|
@IBOutlet weak var contactNameField: UITextField! //联系人名称
|
@IBOutlet weak var provinceBtn: QMUIButton! //省
|
@IBOutlet weak var cityBtn: QMUIButton! //市
|
@IBOutlet weak var detailField: UITextField! //详细地址
|
@IBOutlet weak var imageCollecHeiCons: NSLayoutConstraint!
|
@IBOutlet weak var agreenTreatyBtn: UIButton!
|
@IBOutlet weak var agreenTreatyView: UIView!
|
|
private var currChoosePhoto:Int = 0
|
private var selectImgAssets = NSMutableArray()
|
private var selectCarImgAssets = NSMutableArray()
|
private var selectVideo:PHAsset?
|
private var selectCoverImg:UIImage!
|
private var selectProvince:BRProvinceModel?
|
private var selectCity:BRCityModel?
|
private var isEdit = false
|
private var rentCarReqModel:RentCarReqModel!
|
private var brandModels = [BrandModel]()
|
private var tempImgeSaveManager:TempImgeSaveManager = TempImgeSaveManager.getSharedInstance()
|
private var configModels:[ConfigModel] = ConfigModel.localConfig()
|
private let agreementViewModel = AgreementViewModel()
|
private var saveEdit:Bool!
|
|
init(_ m:RentCarReqModel?,isEdit:Bool,saveEdit:Bool = true) {
|
super.init(nibName: nil, bundle: nil)
|
self.isEdit = isEdit
|
self.rentCarReqModel = m
|
self.isEdit = isEdit
|
self.saveEdit = saveEdit
|
}
|
|
required init?(coder: NSCoder) {
|
fatalError("init(coder:) has not been implemented")
|
}
|
|
override func viewDidLoad() {
|
view.backgroundColor = UIColor(hexString: "#F3F4F5")
|
|
selectImgAssets.add("icon_photo_update-1")
|
selectCarImgAssets.add("icon_photo_update-1")
|
|
if !isEdit{
|
navigationItem.title = "车辆转租信息发布"
|
rentCarReqModel = RentCarReqModel.get()
|
}else{
|
navigationItem.title = "车辆转租信息编辑"
|
}
|
|
titleField.text = rentCarReqModel.title
|
typeField.text = rentCarReqModel.category
|
brandField.text = rentCarReqModel.brandName
|
seatField.text = rentCarReqModel.seat
|
displacementField.text = rentCarReqModel.displacement
|
gearsField.text = rentCarReqModel.gear
|
takeCarIdCardField.text = rentCarReqModel.pickUpCarCarCertificates
|
|
if rentCarReqModel.rentMoney != nil && rentCarReqModel.rentMoney != 0{
|
rentMoneyField.text = String(format: "%.2lf", rentCarReqModel.rentMoney!)
|
}
|
|
if rentCarReqModel.deposit != nil && rentCarReqModel.deposit != 0{
|
cashPledgeField.text = String(format: "%.2lf", rentCarReqModel.deposit!)
|
}
|
|
if rentCarReqModel.provinceName != nil{
|
provinceBtn.setTitle(rentCarReqModel.provinceName, for: .normal)
|
provinceBtn.setTitleColor(.black, for: .normal)
|
}
|
|
if rentCarReqModel.cityName != nil{
|
cityBtn.setTitle(rentCarReqModel.cityName, for: .normal)
|
cityBtn.setTitleColor(.black, for: .normal)
|
}
|
|
|
let queue = DispatchQueue(label: "video")
|
queue.async {[weak self] () in
|
guard let weakSelf = self else { return }
|
if let videoUrl = weakSelf.rentCarReqModel.videoUrl,videoUrl.isEmpty == false{
|
let asset = AVURLAsset(url: URL(string: videoUrl)!)
|
let gen = AVAssetImageGenerator(asset: asset)
|
gen.appliesPreferredTrackTransform = true
|
let time = CMTimeMakeWithSeconds(0.0, preferredTimescale: 1)
|
var actualTime : CMTime = CMTimeMakeWithSeconds(0, preferredTimescale: 0)
|
do {
|
let image = try gen.copyCGImage(at: time, actualTime: &actualTime)
|
DispatchQueue.main.async {
|
weakSelf.selectCoverImg = UIImage(cgImage: image)
|
weakSelf.carVideoBtn.setImage(weakSelf.selectCoverImg, for: .normal)
|
weakSelf.carVIdeoCountL.text = "车辆视频1/1"
|
}
|
} catch {
|
print("错误")
|
}
|
}
|
}
|
|
|
|
if let imgUrls = rentCarReqModel.imgUrl?.components(separatedBy: ",").filter({!$0.isEmpty}){
|
for imgUrl in imgUrls {
|
selectImgAssets.insert(imgUrl, at: 0)
|
}
|
}
|
|
if let imgUrls = rentCarReqModel.describeImgUrl?.components(separatedBy: ",").filter({!$0.isEmpty}){
|
for imgUrl in imgUrls {
|
selectCarImgAssets.insert(imgUrl, at: 0)
|
}
|
}
|
|
descTextView.text = rentCarReqModel.describe
|
contactNameField.text = rentCarReqModel.contactsName
|
detailField.text = rentCarReqModel.addres
|
|
if contactPhoneField.text!.isEmpty{
|
contactPhoneField.text = readUser().phone
|
rentCarReqModel.contactsPhone = readUser().phone
|
}
|
|
|
|
yy_popBlock = { [weak self] () in
|
guard let weakSelf = self else { return }
|
|
if !weakSelf.saveEdit{
|
weakSelf.yy_pop();return
|
}
|
|
if weakSelf.rentCarReqModel?.hasValue ?? false{
|
alert(popup: .double, title: "提示", text: "您的数据还未提交,确定返回?", submitTitle: "确定", cancelTitle: "取消") {
|
//缓存数据
|
weakSelf.tempImgeSaveManager.rent_imgs_1.removeAll()
|
for item in weakSelf.selectImgAssets{
|
if let m = item as? PHAsset{
|
weakSelf.tempImgeSaveManager.sell_imgs_1.insert(m, at: 0)
|
}
|
}
|
weakSelf.rentCarReqModel.save()
|
weakSelf.yy_pop()
|
} cancelClick: {
|
|
}
|
}else{
|
weakSelf.yy_pop()
|
}
|
}
|
|
APIManager.shared.provider.rx.request(.queryAllBrand).map(YYModel<[BrandModel]>.self).validate().subscribe(onSuccess: {[weak self] state in
|
self?.brandModels = state.data ?? []
|
}) { error in
|
|
}.disposed(by: disposeBag)
|
|
calImgHei()
|
|
super.viewDidLoad()
|
}
|
|
override func setupViews() {
|
super.setupViews()
|
provinceBtn.imagePosition = .right
|
cityBtn.imagePosition = .right
|
provinceBtn.spacingBetweenImageAndTitle = 7
|
cityBtn.spacingBetweenImageAndTitle = 7
|
typeField.delegate = self
|
brandField.delegate = self
|
// seatField.delegate = self
|
// gearsField.delegate = self
|
rentMoneyField.delegate = self
|
displacementField.delegate = self
|
cashPledgeField.delegate = self
|
takeCarIdCardField.delegate = self
|
imageCollecView.delegate = self
|
imageCollecView.dataSource = self
|
imageCollecView.register(UINib(nibName: "Common_FullImg_CCell", bundle: nil), forCellWithReuseIdentifier: "_Common_FullImg_CCell")
|
|
carImgsCollectionView.delegate = self
|
carImgsCollectionView.dataSource = self
|
carImgsCollectionView.register(UINib(nibName: "Common_FullImg_CCell", bundle: nil), forCellWithReuseIdentifier: "_Common_FullImg_CCell")
|
}
|
|
override func bindRx() {
|
titleField.rx.text.orEmpty.subscribe(onNext: {[weak self] text in
|
self?.rentCarReqModel?.title = text
|
}).disposed(by: disposeBag)
|
|
contactNameField.rx.text.orEmpty.subscribe(onNext: {[weak self] text in
|
self?.rentCarReqModel?.contactsName = text
|
}).disposed(by: disposeBag)
|
|
detailField.rx.text.orEmpty.subscribe(onNext: {[weak self] text in
|
self?.rentCarReqModel?.addres = text
|
}).disposed(by: disposeBag)
|
|
descTextView.rx.text.orEmpty.subscribe(onNext: {[weak self] text in
|
self?.rentCarReqModel?.describe = text
|
}).disposed(by: disposeBag)
|
|
rentMoneyField.rx.text.orEmpty.subscribe(onNext: {[weak self] text in
|
if !text.isEmpty{
|
self?.rentCarReqModel?.rentMoney = text.wy_toDouble()
|
}
|
}).disposed(by: disposeBag)
|
|
seatField.rx.text.orEmpty.subscribe(onNext: {[weak self] text in
|
if !text.isEmpty{
|
self?.rentCarReqModel.seat = text
|
}
|
}).disposed(by: disposeBag)
|
|
displacementField.rx.text.orEmpty.subscribe(onNext: {[weak self] text in
|
if !text.isEmpty{
|
self?.rentCarReqModel.displacement = text
|
}
|
}).disposed(by: disposeBag)
|
|
gearsField.rx.text.orEmpty.subscribe(onNext: {[weak self] text in
|
self?.rentCarReqModel.gear = text
|
}).disposed(by: disposeBag)
|
|
cashPledgeField.rx.text.orEmpty.subscribe(onNext: {[weak self] text in
|
if !text.isEmpty{
|
self?.rentCarReqModel?.deposit = text.wy_toDouble()
|
}
|
}).disposed(by: disposeBag)
|
|
agreementViewModel.requestSubject.subscribe(onNext: {[weak self]state in
|
switch state {
|
case .success(let model):
|
guard let data: SwitchCityModel = model as? SwitchCityModel else {return}
|
let webView = YYWebView()
|
webView.name = "汽车出租协议"
|
webView.url = data.content
|
self?.yy_push(vc: webView)
|
default:break
|
}
|
|
}).disposed(by: disposeBag)
|
}
|
|
override func defineLayouts() {
|
super.defineLayouts()
|
|
}
|
|
|
@IBAction func provinceAction(_ sender: QMUIButton) {
|
BRAddressPickerView.showAddressPicker(withShowType: .province, defaultSelected: [], isAutoSelect: false, themeColor: UIColor.red) { m1, m2, m3 in
|
self.selectProvince = m1
|
self.provinceBtn.setTitle(m1!.name.components(separatedBy: "省").first, for: .normal)
|
self.rentCarReqModel.provinceName = m1!.name
|
self.rentCarReqModel.provinceCode = m1!.code
|
////74040 【车辆转租-编辑】编辑填写页面,重新选择了省后,后面的市应清空让用户重新选择
|
self.rentCarReqModel.cityName = nil
|
self.rentCarReqModel.cityCode = nil
|
self.selectCity = nil
|
self.cityBtn.setTitle("请选择", for: .normal)
|
self.cityBtn.setTitleColor(.black.withAlphaComponent(0.4), for: .normal)
|
self.detailField.text = ""
|
self.rentCarReqModel.addres = nil
|
} cancel: {
|
|
}
|
}
|
|
//协议勾选
|
@IBAction func agreenTreatyAction(_ sender: UIButton) {
|
sender.isSelected = !sender.isSelected
|
}
|
|
|
/// 协议查看
|
@IBAction func treatyAction(_ sender: UIButton) {
|
agreementViewModel.type.accept(.carRent)
|
agreementViewModel.agreement()
|
}
|
|
@IBAction func cityAction(_ sender: QMUIButton) {
|
|
guard let province = selectProvince else {
|
alert(text: "请先选择省份");return
|
}
|
|
BRAddressPickerView.showAddressPicker(withShowType: .cityOnly, defaultSelected: [province.name!], isAutoSelect: false, themeColor: UIColor.red) { m1, m2, m3 in
|
self.selectCity = m2
|
self.cityBtn.setTitle(m2!.name.components(separatedBy: "市").first, for: .normal)
|
self.cityBtn.setTitleColor(.black, for: .normal)
|
self.rentCarReqModel.cityName = m2!.name
|
self.rentCarReqModel.cityCode = m2!.code
|
self.detailField.text = ""
|
self.rentCarReqModel.addres = nil
|
} cancel: {
|
|
}
|
}
|
|
private func calImgHei(){
|
let h = ceil(Double(selectImgAssets.count) / 3.0) * cellH + floor(Double(selectImgAssets.count) / 3.0) * 10
|
imageCollecHeiCons.constant = h
|
imageCollecView.reloadData()
|
|
let h1 = ceil(Double(selectCarImgAssets.count) / 3.0) * cellH + floor(Double(selectCarImgAssets.count) / 3.0) * 10
|
carImgsCollectionHeiCons.constant = h1
|
carImgsCollectionView.reloadData()
|
|
carImgsCountL.text = "*车辆图片\(selectCarImgAssets.count - 1)/15"
|
|
}
|
|
@objc func delAction(_ btn:UIButton){
|
selectImgAssets.removeObject(at: btn.tag - 10)
|
calImgHei()
|
}
|
|
|
@objc func delCarAction(_ btn:UIButton){
|
selectCarImgAssets.removeObject(at: btn.tag - 10)
|
calImgHei()
|
}
|
|
@IBAction func uploadVideoAction(_ sender: UIButton) {
|
let p = TZImagePickerController(maxImagesCount: 1, columnNumber: 4, delegate: self)
|
p!.allowTakeVideo = true
|
p!.allowTakePicture = false
|
p!.sortAscendingByModificationDate = true
|
p!.allowPickingImage = false
|
p!.allowPickingVideo = true
|
p!.allowCrop = false
|
present(p!, animated: true, completion: nil)
|
}
|
|
|
@IBAction func submitAction(_ sender: UIButton) {
|
|
guard agreenTreatyBtn.isSelected else {
|
alert(text: "请先阅读并同意《宽窄优行汽车出租协议》");return
|
}
|
|
guard rentCarReqModel.checkInputValue() else {return}
|
|
// guard selectImgAssets.count > 1 else {
|
// alert(text: "请上传车况图片");return
|
// }
|
|
guard selectCarImgAssets.count > 1 else {
|
alert(text: "请上传车辆图片");return
|
}
|
|
guard let province = rentCarReqModel.provinceCode,province.isEmpty == false else {
|
alert(text: "请选择省份");return
|
}
|
|
guard let city = rentCarReqModel.cityCode,city.isEmpty == false else {
|
alert(text: "请选择市区");return
|
}
|
|
guard !detailField.text!.isEmpty else {
|
alert(text: "请输入详细地址");return
|
}
|
|
show()
|
|
let queue = DispatchQueue(label: "upload")
|
let group = DispatchGroup()
|
|
let imgPHAssets = selectImgAssets.filter({$0 is PHAsset}) as? [PHAsset]
|
if (imgPHAssets?.count ?? 0) > 0{
|
queue.async(group: group){ [weak self] () in
|
guard let weakSelf = self else { return }
|
group.enter()
|
var temp = [UIImage]()
|
for img in imgPHAssets!{
|
temp.append(UIImage.JQ_PHAssetToImage(asset: img))
|
}
|
|
var names = [String]()
|
for (index,_) in temp.enumerated() {
|
names.append("car_\(Date().timeStamp())_\(index)")
|
}
|
YYAliyunOSSManager.shared.uploadImage(keys: names, image: temp).subscribe(onNext: {imgUrls in
|
var originUrls = weakSelf.selectImgAssets.filter { obj in
|
if let o = obj as? String{
|
return (o.contains("http://") || o.contains("https://"))
|
}
|
return false
|
} as! [String]
|
originUrls.append(contentsOf: imgUrls)
|
weakSelf.rentCarReqModel.describeImgUrl = originUrls.joined(separator: ",")
|
group.leave()
|
}) { error in
|
group.leave()
|
}.disposed(by: weakSelf.disposeBag)
|
}
|
}
|
|
let imgPH1Assets = selectCarImgAssets.filter({$0 is PHAsset}) as? [PHAsset]
|
if (imgPH1Assets?.count ?? 0) > 0{
|
queue.async(group: group){ [weak self] () in
|
guard let weakSelf = self else { return }
|
group.enter()
|
var temp = [UIImage]()
|
for img in imgPH1Assets!{
|
temp.append(UIImage.JQ_PHAssetToImage(asset: img))
|
}
|
|
var names = [String]()
|
for (index,_) in temp.enumerated() {
|
names.append("car_desc_\(Date().timeStamp())_\(index)")
|
}
|
YYAliyunOSSManager.shared.uploadImage(keys: names, image: temp).subscribe(onNext: {imgUrls in
|
var originUrls = weakSelf.selectCarImgAssets.filter { obj in
|
if let o = obj as? String{
|
return (o.contains("http://") || o.contains("https://"))
|
}
|
return false
|
} as! [String]
|
originUrls.append(contentsOf: imgUrls)
|
weakSelf.rentCarReqModel.imgUrl = originUrls.joined(separator: ",")
|
group.leave()
|
}) { error in
|
group.leave()
|
}.disposed(by: weakSelf.disposeBag)
|
}
|
}
|
|
if selectVideo != nil{
|
queue.async(group: group){ [weak self] () in
|
guard let weakSelf = self else { return }
|
group.enter()
|
YYAliyunOSSManager.shared.uploadVideo(key: "car_video_\(Date().timeStamp())", video: weakSelf.selectVideo!).subscribe(onNext: {videoUrl in
|
weakSelf.rentCarReqModel.videoUrl = videoUrl
|
group.leave()
|
}) { error in
|
group.leave()
|
}.disposed(by: weakSelf.disposeBag)
|
}
|
}
|
|
group.notify(queue: DispatchQueue.main) { [weak self] () in
|
guard let weakSelf = self else { return }
|
weakSelf.hide()
|
// 通知主线程,子线程操作已完成
|
APIManager.shared.provider.rx.request(.rentCar(weakSelf.rentCarReqModel)).map(YYModel<Nothing>.self).subscribe(onSuccess: {data in
|
weakSelf.hide()
|
if weakSelf.isEdit{
|
//74043 【车辆转租-编辑】编辑后,再点击提交,应跳转到 我发布的列表(原型如此)
|
for (index,vc) in weakSelf.navigationController!.viewControllers.enumerated() {
|
if let _ = vc as? MinePublishVC{
|
NotificationCenter.default.post(name: Refresh_MinePublish, object: nil)
|
weakSelf.yy_popToVC(index: index)
|
break
|
}
|
}
|
}else{
|
let vc = PublishSellCarSuccessVC(type: .rent)
|
weakSelf.yy_push(vc: vc)
|
}
|
//提交成功
|
weakSelf.rentCarReqModel?.clear()
|
TempImgeSaveManager.destroy()
|
}) { error in
|
weakSelf.hide()
|
|
}.disposed(by: weakSelf.disposeBag)
|
}
|
}
|
}
|
|
|
extension MinePublishHireEditVC:UITextFieldDelegate{
|
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
|
view.endEditing(true)
|
if textField == typeField{
|
CommonAlertSheetView.show(type: .single, titles: ["大巴","中巴","面包车","商务车","豪华轿车","新能源车","普通轿车","跑车","SUV","特殊车辆","出租车","货车"],maxHei: 150) {[weak self] index, str in
|
textField.text = str
|
self?.rentCarReqModel.category = str
|
}
|
return false
|
}
|
|
if textField == brandField{
|
let names = brandModels.map({$0.name})
|
CommonAlertSheetView.show(type: .single, titles: names,maxHei: 200) {[weak self] index, str in
|
guard let weakSelf = self else { return }
|
textField.text = str
|
weakSelf.rentCarReqModel?.brandId = weakSelf.brandModels[index].id
|
weakSelf.rentCarReqModel.brandName = weakSelf.brandModels[index].name
|
}
|
return false
|
}
|
|
//排量 73773 【车辆转租信息发布】排量、挡位用输入的,不用选择的
|
// if textField == displacementField{
|
// CommonAlertSheetView.show(type: .single, titles: ["0.5L","0.8L","1.0L","1.5L","2.0L","2.5L","3.0L","3.5L","4.0L","4.5L","5.0L"],maxHei: 150) { [weak self] index, str in
|
// textField.text = str
|
// self?.rentCarReqModel?.displacement = str
|
// }
|
// return false
|
// }
|
|
// if textField == seatField{
|
// CommonAlertSheetView.show(type: .single, titles: ["2座","4座","5座","6座","7座","8座"]) {[weak self]index, str in
|
// textField.text = str
|
// self?.rentCarReqModel.seat = str
|
// }
|
// return false
|
// }
|
|
//73773 【车辆转租信息发布】排量、挡位用输入的,不用选择的
|
// if textField == gearsField{
|
// CommonAlertSheetView.show(type: .single, titles: ["自动挡","手动挡"]) {[weak self]index, str in
|
// textField.text = str
|
// self?.rentCarReqModel.gear = str
|
// }
|
// return false
|
// }
|
|
if textField == takeCarIdCardField{
|
|
CommonAlertSheetView.show(type: .single, titles: ["身份证","驾驶证","驾驶员资格证"], mutableSelect: true) { (_,_) in
|
|
} mutableClouse: { [weak self] indexs, strs in
|
self?.rentCarReqModel.pickUpCarCarCertificates = strs.joined(separator: ",")
|
textField.text = strs.joined(separator: ",")
|
}
|
|
return false
|
}
|
return true
|
}
|
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
|
if textField != cashPledgeField && textField != rentMoneyField && textField != displacementField{
|
return true
|
}
|
// 前面的判断都是正确滴 不需要改动 在最后面加位数限制
|
var Digits = 7
|
|
if textField == displacementField{
|
Digits = 2
|
}
|
|
if textField.text?.contains(".") == false && string != "" && string != "."{
|
if (textField.text?.length)! > Digits{
|
return false
|
}
|
}
|
|
let scanner = Scanner(string: string)
|
let numbers : NSCharacterSet
|
let pointRange = (textField.text! as NSString).range(of: ".")
|
|
if (pointRange.length > 0) && pointRange.length < range.location || pointRange.location > range.location + range.length {
|
numbers = NSCharacterSet(charactersIn: "0123456789.")
|
}else{
|
numbers = NSCharacterSet(charactersIn: "0123456789.")
|
}
|
|
if textField.text == "" && string == "." {
|
return false
|
}
|
|
let remain = 2
|
|
let tempStr = textField.text!.appending(string)
|
|
let strlen = tempStr.length
|
|
if pointRange.length > 0 && pointRange.location > 0{//判断输入框内是否含有“.”。
|
if string == "." {
|
return false
|
}
|
|
if strlen > 0 && (strlen - pointRange.location) > remain + 1 {//当输入框内已经含有“.”,当字符串长度减去小数点前面的字符串长度大于需要要保留的小数点位数,则视当次输入无效。
|
return false
|
}
|
}
|
|
let zeroRange = (textField.text! as NSString).range(of: "0")
|
if zeroRange.length == 1 && zeroRange.location == 0 { //判断输入框第一个字符是否为“0”
|
if !(string == "0") && !(string == ".") && textField.text?.length == 1 {//当输入框只有一个字符并且字符为“0”时,再输入不为“0”或者“.”的字符时,则将此输入替换输入框的这唯一字符。
|
textField.text = string
|
return false
|
}else {
|
if pointRange.length == 0 && pointRange.location > 0 {//当输入框第一个字符为“0”时,并且没有“.”字符时,如果当此输入的字符为“0”,则视当此输入无效。
|
if string == "0" {
|
return false
|
}
|
}
|
}
|
}
|
// let buffer : NSString!
|
if !scanner.scanCharacters(from: numbers as CharacterSet, into: nil) && string.length != 0 {
|
return false
|
}
|
return true
|
}
|
}
|
|
extension MinePublishHireEditVC:UICollectionViewDelegate{
|
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
|
if collectionView == imageCollecView{
|
currChoosePhoto = 10
|
if let imgStr = selectImgAssets[indexPath.row] as? String,imgStr == "icon_photo_update-1"{
|
|
let temp = NSMutableArray()
|
let imgUrltemp = NSMutableArray()
|
for i in selectImgAssets {
|
if let a = i as? PHAsset{
|
temp.add(a)
|
}
|
if let a = i as? String,a != imgStr{
|
imgUrltemp.add(a)
|
}
|
}
|
|
CommonAlertSheetView.show(type: .single, titles: ["相机","相册"]) { index, str in
|
if index == 0{
|
let p = UIImagePickerController()
|
p.delegate = self
|
p.modalPresentationStyle = .fullScreen
|
p.allowsEditing = false
|
p.sourceType = .camera
|
LD_currentViewController().present(p, animated: true, completion: nil)
|
}else{
|
ImagePickerTool.default.multiImage(vc: self, { image, assets in
|
self.selectImgAssets = NSMutableArray(array: assets)
|
if let imgsUrl = self.rentCarReqModel.imgUrl,!imgsUrl.isEmpty{
|
self.selectImgAssets.addObjects(from: imgsUrl.components(separatedBy: ",").filter({!$0.isEmpty}))
|
}
|
self.selectImgAssets.add("icon_photo_update-1")
|
self.calImgHei()
|
}, max: 8 - imgUrltemp.count, selectAsstes: temp)
|
}
|
}
|
}
|
}
|
|
if collectionView == carImgsCollectionView{
|
currChoosePhoto = 11
|
if let imgStr = selectCarImgAssets[indexPath.row] as? String,imgStr == "icon_photo_update-1"{
|
|
let temp = NSMutableArray()
|
let imgUrltemp = NSMutableArray()
|
for i in selectCarImgAssets {
|
if let a = i as? PHAsset{
|
temp.add(a)
|
}
|
if let a = i as? String,a != imgStr{
|
imgUrltemp.add(a)
|
}
|
}
|
|
CommonAlertSheetView.show(type: .single, titles: ["相机","相册"]) { index, str in
|
if index == 0{
|
let p = UIImagePickerController()
|
p.delegate = self
|
p.modalPresentationStyle = .fullScreen
|
p.allowsEditing = false
|
p.sourceType = .camera
|
LD_currentViewController().present(p, animated: true, completion: nil)
|
}else{
|
ImagePickerTool.default.multiImage(vc: self, { image, assets in
|
self.selectCarImgAssets = NSMutableArray(array: assets)
|
self.selectCarImgAssets.add("icon_photo_update-1")
|
if let imgsUrl = self.rentCarReqModel.describeImgUrl,!imgsUrl.isEmpty{
|
self.selectCarImgAssets.addObjects(from: imgsUrl.components(separatedBy: ",").filter({!$0.isEmpty}))
|
}
|
self.calImgHei()
|
}, max: 15 - imgUrltemp.count, selectAsstes: temp)
|
}
|
}
|
}
|
}
|
}
|
}
|
|
extension MinePublishHireEditVC:UICollectionViewDataSource{
|
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
if collectionView == imageCollecView{
|
return selectImgAssets.count
|
}else{
|
return selectCarImgAssets.count
|
}
|
|
}
|
|
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_Common_FullImg_CCell", for: indexPath) as! Common_FullImg_CCell
|
|
if collectionView == imageCollecView{
|
if let imgStr = selectImgAssets[indexPath.row] as? String{
|
if imgStr == "icon_photo_update-1"{
|
cell.closeBtn.isHidden = true
|
cell.img.image = UIImage(named: imgStr)
|
}else{
|
cell.closeBtn.isHidden = false
|
cell.img.load(url: imgStr)
|
}
|
}else if let asset = selectImgAssets[indexPath.row] as? PHAsset {
|
cell.closeBtn.isHidden = false
|
cell.img.image = UIImage.JQ_PHAssetToImage(asset: asset)
|
}else if let img = selectImgAssets[indexPath.row] as? UIImage{
|
cell.closeBtn.isHidden = false
|
cell.img.image = img
|
}
|
cell.closeBtn.tag = 10 + indexPath.row
|
cell.closeBtn.addTarget(self, action: #selector(delAction(_:)), for: .touchUpInside)
|
}else{
|
if let imgStr = selectCarImgAssets[indexPath.row] as? String{
|
if imgStr == "icon_photo_update-1"{
|
cell.closeBtn.isHidden = true
|
cell.img.image = UIImage(named: imgStr)
|
}else{
|
cell.closeBtn.isHidden = false
|
cell.img.load(url: imgStr)
|
}
|
}else if let asset = selectCarImgAssets[indexPath.row] as? PHAsset {
|
cell.closeBtn.isHidden = false
|
cell.img.image = UIImage.JQ_PHAssetToImage(asset: asset)
|
}else if let img = selectCarImgAssets[indexPath.row] as? UIImage{
|
cell.closeBtn.isHidden = false
|
cell.img.image = img
|
}
|
cell.closeBtn.tag = 10 + indexPath.row
|
cell.closeBtn.addTarget(self, action: #selector(delCarAction(_:)), for: .touchUpInside)
|
|
}
|
|
return cell
|
}
|
}
|
|
extension MinePublishHireEditVC:UICollectionViewDelegateFlowLayout{
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
|
return CGSize(width: cellW, height: cellH)
|
}
|
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
|
return 10
|
}
|
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
|
return 10
|
}
|
}
|
|
extension MinePublishHireEditVC:UIImagePickerControllerDelegate & UINavigationControllerDelegate {
|
|
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
|
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage{
|
var assetId:String = ""
|
PHPhotoLibrary.shared().performChanges {
|
assetId = PHAssetCreationRequest.creationRequestForAsset(from: image).placeholderForCreatedAsset!.localIdentifier
|
} completionHandler: { [weak self] sta, error in
|
if let ass = PHAsset.fetchAssets(withLocalIdentifiers: [assetId], options: nil).lastObject{
|
DispatchQueue.main.async {
|
if self?.currChoosePhoto == 10{
|
self?.selectImgAssets.insert(ass, at: 0)
|
}else{
|
self?.selectCarImgAssets.insert(ass, at: 0)
|
}
|
self?.calImgHei()
|
}
|
}
|
}
|
}
|
picker.dismiss(animated: true) {}
|
}
|
}
|
|
extension MinePublishHireEditVC:TZImagePickerControllerDelegate{
|
func imagePickerController(_ picker: TZImagePickerController!, didFinishPickingVideo coverImage: UIImage!, sourceAssets asset: PHAsset!) {
|
carVideoBtn.setImage(coverImage, for: .normal)
|
selectVideo = asset
|
selectCoverImg = coverImage
|
carVIdeoCountL.text = "车辆视频1/1"
|
}
|
}
|