소스 검색

选择器完成

南鑫林 6 년 전
부모
커밋
5251bb2b74

+ 16 - 0
RainbowPlanet/RainbowPlanet.xcodeproj/project.pbxproj

@@ -36,6 +36,8 @@
 		A70B2C60228870CE00B2449F /* ShopSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A70B2C5F228870CE00B2449F /* ShopSectionHeaderView.swift */; };
 		A70B2C64228875DE00B2449F /* ShopViewShopInfoTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A70B2C63228875DE00B2449F /* ShopViewShopInfoTableViewCell.swift */; };
 		A70B2C6722887B2B00B2449F /* ProductDetailEvaluationListTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A70B2C6622887B2B00B2449F /* ProductDetailEvaluationListTableViewCell.swift */; };
+		A70B2C6B2288815300B2449F /* PickHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A70B2C6A2288815300B2449F /* PickHeaderView.swift */; };
+		A70B2C6D2288815E00B2449F /* PickViewOneComponentsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A70B2C6C2288815E00B2449F /* PickViewOneComponentsView.swift */; };
 		A70EBBC022561179000AD74F /* Extension+UITableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A70EBBBF22561179000AD74F /* Extension+UITableView.swift */; };
 		A7190167227543DB00104A50 /* baidu_cityid_rel.json in Resources */ = {isa = PBXBuildFile; fileRef = A7190166227543DB00104A50 /* baidu_cityid_rel.json */; };
 		A71901692275464000104A50 /* ProvinceCityAreaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A71901682275464000104A50 /* ProvinceCityAreaView.swift */; };
@@ -349,6 +351,8 @@
 		A70B2C5F228870CE00B2449F /* ShopSectionHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopSectionHeaderView.swift; sourceTree = "<group>"; };
 		A70B2C63228875DE00B2449F /* ShopViewShopInfoTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShopViewShopInfoTableViewCell.swift; sourceTree = "<group>"; };
 		A70B2C6622887B2B00B2449F /* ProductDetailEvaluationListTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductDetailEvaluationListTableViewCell.swift; sourceTree = "<group>"; };
+		A70B2C6A2288815300B2449F /* PickHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PickHeaderView.swift; sourceTree = "<group>"; };
+		A70B2C6C2288815E00B2449F /* PickViewOneComponentsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PickViewOneComponentsView.swift; sourceTree = "<group>"; };
 		A70EBBBF22561179000AD74F /* Extension+UITableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+UITableView.swift"; sourceTree = "<group>"; };
 		A7190166227543DB00104A50 /* baidu_cityid_rel.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = baidu_cityid_rel.json; sourceTree = "<group>"; };
 		A71901682275464000104A50 /* ProvinceCityAreaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProvinceCityAreaView.swift; sourceTree = "<group>"; };
@@ -929,6 +933,15 @@
 			path = ProductDetailEvaluationList;
 			sourceTree = "<group>";
 		};
+		A70B2C692288810700B2449F /* PickView */ = {
+			isa = PBXGroup;
+			children = (
+				A70B2C6A2288815300B2449F /* PickHeaderView.swift */,
+				A70B2C6C2288815E00B2449F /* PickViewOneComponentsView.swift */,
+			);
+			path = PickView;
+			sourceTree = "<group>";
+		};
 		A71901622275411C00104A50 /* ProvinceCityArea */ = {
 			isa = PBXGroup;
 			children = (
@@ -1184,6 +1197,7 @@
 		A729B5A52266DBC9004AE098 /* CommonModules */ = {
 			isa = PBXGroup;
 			children = (
+				A70B2C692288810700B2449F /* PickView */,
 				A70B2C502288581600B2449F /* ShareModule */,
 				A72C011F2275399D0065E0C3 /* ProvinceCityAreaModules */,
 				A7636ABD2268123B00374F9E /* LocationModule */,
@@ -2987,6 +3001,7 @@
 				A70B2C5E22886F4D00B2449F /* ShopViewTableViewCell.swift in Sources */,
 				A7CC753A2271B98B003C4F38 /* AddressManagerAddTableViewCell.swift in Sources */,
 				A71AF0AC226EDE37001730FE /* SearchNavigationbarView.swift in Sources */,
+				A70B2C6D2288815E00B2449F /* PickViewOneComponentsView.swift in Sources */,
 				BDD4FB1422840954006FE833 /* ShoppingCartOrderPayView.swift in Sources */,
 				A70B2C222286BF5900B2449F /* ProductDetailTableViewHeaderView.swift in Sources */,
 				A7CC75432271E038003C4F38 /* SelfMentionContactsListViewController.swift in Sources */,
@@ -3080,6 +3095,7 @@
 				A729B5B42267254B004AE098 /* PasswordLoginViewController.swift in Sources */,
 				A7B4E7582282897B0012914A /* ProductFloorLeftHeaderCollectionReusableView.swift in Sources */,
 				A7D4608E227616F800A5A54E /* SQLiteManager.swift in Sources */,
+				A70B2C6B2288815300B2449F /* PickHeaderView.swift in Sources */,
 				A77F2C612231FB49001BD3F6 /* AppDelegate.swift in Sources */,
 				A729B5A82266F2E0004AE098 /* AlertSheetView.swift in Sources */,
 				A7CC75382271ADD6003C4F38 /* AddressManagerSelfMentionExpressHeaderView.swift in Sources */,

+ 60 - 0
RainbowPlanet/RainbowPlanet/Modules/CommonModules/PickView/PickHeaderView.swift

@@ -0,0 +1,60 @@
+//
+//  PickHeaderView.swift
+//  ReceptionHall
+//
+//  Created by 南鑫林 on 2019/5/5.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+
+class PickHeaderView: BaseView {
+
+    override func setupViews() {
+        backgroundColor = kf5f5f5Color
+        addSubview(titleLabel)
+        addSubview(cancleButton)
+        addSubview(sureButton)
+    }
+    
+    override func setupLayouts() {
+        titleLabel.snp.makeConstraints { (make) in
+            make.center.equalToSuperview()
+        }
+        cancleButton.snp.makeConstraints { (make) in
+            make.centerY.equalToSuperview()
+            make.size.equalTo(kScaleWidth * 30)
+            make.left.equalTo(kScaleWidth * 7)
+        }
+        sureButton.snp.makeConstraints { (make) in
+            make.centerY.equalToSuperview()
+            make.size.equalTo(kScaleWidth * 30)
+            make.right.equalTo(kScaleWidth * -7)
+        }
+    }
+    
+    lazy var titleLabel: UILabel = {
+        let titleLabel = UILabel()
+        return titleLabel
+    }()
+    
+    lazy var cancleButton: UIButton = {
+        let cancleButton = UIButton(type: UIButton.ButtonType.custom)
+        cancleButton.setTitle("取消", for: UIControl.State.normal)
+        return cancleButton
+    }()
+    
+    lazy var sureButton: UIButton = {
+        let sureButton = UIButton(type: UIButton.ButtonType.custom)
+        sureButton.setTitle("完成", for: UIControl.State.normal)
+
+        return sureButton
+    }()
+    
+    var title: String? {
+        didSet {
+            titleLabel.text = title
+        }
+    }
+
+}

+ 136 - 0
RainbowPlanet/RainbowPlanet/Modules/CommonModules/PickView/PickViewOneComponentsView.swift

@@ -0,0 +1,136 @@
+//
+//  SexView.swift
+//  ReceptionHall
+//
+//  Created by 南鑫林 on 2019/5/10.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+import FWPopupView
+import RxSwift
+import RxCocoa
+
+class PickViewOneComponentsView: FWPopupView {
+    
+    typealias SureClosure = (_ row: Int?,_ value:String?) -> Void
+    var sureClosure : SureClosure?
+    
+    var titles : [String]!
+    var title : String!
+    
+    override init(frame: CGRect) {
+        super.init(frame: frame)
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    init(titles:[String],title:String) {
+        self.init()
+        self.titles = titles
+        self.title = title
+        setupViews()
+        setupLayouts()
+        setupData()
+    }
+
+    func setupViews() {
+        
+        addSubview(pickHeaderView)
+        addSubview(pickerView)
+    }
+    
+    func setupLayouts() {
+        pickHeaderView.snp.makeConstraints { (make) in
+            make.top.left.right.equalToSuperview()
+            make.height.equalTo(50)
+        }
+        pickerView.snp.makeConstraints { (make) in
+            make.top.equalTo(pickHeaderView.snp.bottom)
+            make.left.right.equalToSuperview()
+            make.bottom.equalTo(-kSafeTabBarHeight)
+        }
+    }
+    
+    func setupData() {
+        //按钮点击响应
+        pickHeaderView.sureButton.rx.tap
+            .bind { [weak self] in
+                self?.getPickerViewValue()
+            }
+            .disposed(by: disposeBag)
+        pickHeaderView.cancleButton.rx.tap.subscribe(onNext: {
+            (data) in
+            self.hide()
+        }).disposed(by: disposeBag)
+    }
+    
+    let disposeBag = DisposeBag()
+    
+    //触摸按钮时,获得被选中的索引
+    @objc func getPickerViewValue(){
+        let row = pickerView.selectedRow(inComponent: 0)
+        let value = titles![row]
+        if let sureClosure = sureClosure {
+            sureClosure(row,value)
+        }
+    }
+    
+    lazy var pickHeaderView: PickHeaderView = {
+        let pickHeaderView = PickHeaderView()
+        pickHeaderView.title = title
+        return pickHeaderView
+    }()
+    
+    lazy var pickerView: UIPickerView = {
+        let pickerView = UIPickerView()
+        //将dataSource设置成自己
+        pickerView.dataSource = self
+        //将delegate设置成自己
+        pickerView.delegate = self
+        return pickerView
+    }()
+
+}
+
+extension PickViewOneComponentsView : UIPickerViewDelegate,UIPickerViewDataSource {
+    //设置选择框的列数为1列,继承于UIPickerViewDataSource协议
+    func numberOfComponents(in pickerView: UIPickerView) -> Int {
+        return 1
+    }
+    
+    //设置选择框的行数为9行,继承于UIPickerViewDataSource协议
+    func pickerView(_ pickerView: UIPickerView,
+                    numberOfRowsInComponent component: Int) -> Int {
+        return titles.count
+    }
+    
+    //设置选择框各选项的内容,继承于UIPickerViewDelegate协议
+    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int,
+                    forComponent component: Int) -> String? {
+        for subView in pickerView.subviews {
+            if subView.frame.size.height < 1 {
+                //获取分割线view
+                subView.isHidden = false
+                let view = UIView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 0.667))
+                view.backgroundColor = kf5f5f5Color //设置分割线颜色
+                subView.addSubview(view)
+            }
+        }
+        return titles[row]
+    }
+    
+    //设置列宽
+    func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
+            //第一列变宽
+            return kScreenWidth
+    }
+    
+    // 设置行高
+    func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int)
+        -> CGFloat {
+            return 48
+    }
+}

+ 18 - 0
RainbowPlanet/RainbowPlanet/Tools/AlertSheetView/AlertSheetView.swift

@@ -126,4 +126,22 @@ class AlertSheetView: NSObject {
         view.show()
     }
     
+    
+    /// 单个选择器
+    func sheetPickViewOneComponentsView(titles:[String],title:String,height:CGFloat,sureClosure:((_ row: Int,_ value:String) -> Void)?) {
+        let view = PickViewOneComponentsView(titles: titles,title: title)
+        view.frame = CGRect(x: 0, y: 0, width: kScreenWidth, height: height * kScaleWidth + kSafeTabBarHeight)
+        let vProperty = FWPopupViewProperty()
+        vProperty.popupCustomAlignment = .bottomCenter
+        vProperty.popupAnimationType = .frame
+        vProperty.maskViewColor = UIColor(white: 0, alpha: 0.5)
+        vProperty.touchWildToHide = "1"
+        view.vProperty = vProperty
+        view.sureClosure = { (row,value) in
+            sureClosure!(row!,value!)
+            view.hide()
+        }
+        view.show()
+    }
+    
 }