update
This commit is contained in:
@@ -53,6 +53,8 @@
|
|||||||
79DD0DB42A95F00B00768FE7 /* Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79DD0DB32A95F00B00768FE7 /* Extension.swift */; };
|
79DD0DB42A95F00B00768FE7 /* Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79DD0DB32A95F00B00768FE7 /* Extension.swift */; };
|
||||||
79DD0DBB2A971EB300768FE7 /* ZDViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79DD0DBA2A971EB300768FE7 /* ZDViewController.swift */; };
|
79DD0DBB2A971EB300768FE7 /* ZDViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79DD0DBA2A971EB300768FE7 /* ZDViewController.swift */; };
|
||||||
79E434252AA1919400AEB16C /* CommonAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E434242AA1919400AEB16C /* CommonAlertView.swift */; };
|
79E434252AA1919400AEB16C /* CommonAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E434242AA1919400AEB16C /* CommonAlertView.swift */; };
|
||||||
|
79E434282AA1EFA500AEB16C /* SystemCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E434272AA1EFA500AEB16C /* SystemCall.swift */; };
|
||||||
|
79E4342A2AA5833F00AEB16C /* CustomPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E434292AA5833F00AEB16C /* CustomPicker.swift */; };
|
||||||
79EAD8142A7B86610036E093 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 79EAD8132A7B86610036E093 /* Assets.xcassets */; };
|
79EAD8142A7B86610036E093 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 79EAD8132A7B86610036E093 /* Assets.xcassets */; };
|
||||||
79EAD8172A7B86610036E093 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 79EAD8152A7B86610036E093 /* LaunchScreen.storyboard */; };
|
79EAD8172A7B86610036E093 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 79EAD8152A7B86610036E093 /* LaunchScreen.storyboard */; };
|
||||||
79FB75EC2A988EC000DB00A4 /* MessageCenterTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79FB75EB2A988EC000DB00A4 /* MessageCenterTool.swift */; };
|
79FB75EC2A988EC000DB00A4 /* MessageCenterTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79FB75EB2A988EC000DB00A4 /* MessageCenterTool.swift */; };
|
||||||
@@ -165,6 +167,8 @@
|
|||||||
79DD0DB32A95F00B00768FE7 /* Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extension.swift; sourceTree = "<group>"; };
|
79DD0DB32A95F00B00768FE7 /* Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extension.swift; sourceTree = "<group>"; };
|
||||||
79DD0DBA2A971EB300768FE7 /* ZDViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZDViewController.swift; sourceTree = "<group>"; };
|
79DD0DBA2A971EB300768FE7 /* ZDViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZDViewController.swift; sourceTree = "<group>"; };
|
||||||
79E434242AA1919400AEB16C /* CommonAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonAlertView.swift; sourceTree = "<group>"; };
|
79E434242AA1919400AEB16C /* CommonAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonAlertView.swift; sourceTree = "<group>"; };
|
||||||
|
79E434272AA1EFA500AEB16C /* SystemCall.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemCall.swift; sourceTree = "<group>"; };
|
||||||
|
79E434292AA5833F00AEB16C /* CustomPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomPicker.swift; sourceTree = "<group>"; };
|
||||||
79EAD8072A7B86600036E093 /* OrderScheduling.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OrderScheduling.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
79EAD8072A7B86600036E093 /* OrderScheduling.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OrderScheduling.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
79EAD8132A7B86610036E093 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
79EAD8132A7B86610036E093 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
79EAD8162A7B86610036E093 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
79EAD8162A7B86610036E093 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
@@ -328,6 +332,7 @@
|
|||||||
791887922A80C351007EA0C1 /* Common */ = {
|
791887922A80C351007EA0C1 /* Common */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
79E434262AA1EF8900AEB16C /* Model */,
|
||||||
79DD0DB72A97012400768FE7 /* Controller */,
|
79DD0DB72A97012400768FE7 /* Controller */,
|
||||||
794FBB1A2A8F4DDD00D57BB8 /* View */,
|
794FBB1A2A8F4DDD00D57BB8 /* View */,
|
||||||
791887932A80C351007EA0C1 /* WebView */,
|
791887932A80C351007EA0C1 /* WebView */,
|
||||||
@@ -394,6 +399,8 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
791887C32A84BFDB007EA0C1 /* Tool.swift */,
|
791887C32A84BFDB007EA0C1 /* Tool.swift */,
|
||||||
|
79E434272AA1EFA500AEB16C /* SystemCall.swift */,
|
||||||
|
79E434292AA5833F00AEB16C /* CustomPicker.swift */,
|
||||||
);
|
);
|
||||||
path = Tool;
|
path = Tool;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -643,6 +650,13 @@
|
|||||||
path = Controller;
|
path = Controller;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
79E434262AA1EF8900AEB16C /* Model */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
);
|
||||||
|
path = Model;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
79EAD7FE2A7B86600036E093 = {
|
79EAD7FE2A7B86600036E093 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -925,6 +939,7 @@
|
|||||||
files = (
|
files = (
|
||||||
794FBB232A93519800D57BB8 /* AppUpdateTool.swift in Sources */,
|
794FBB232A93519800D57BB8 /* AppUpdateTool.swift in Sources */,
|
||||||
79CECC242A8B16D400B95D8B /* VehicleMonitoringListController.swift in Sources */,
|
79CECC242A8B16D400B95D8B /* VehicleMonitoringListController.swift in Sources */,
|
||||||
|
79E434282AA1EFA500AEB16C /* SystemCall.swift in Sources */,
|
||||||
791887BD2A83952D007EA0C1 /* Entry.swift in Sources */,
|
791887BD2A83952D007EA0C1 /* Entry.swift in Sources */,
|
||||||
791887952A80C361007EA0C1 /* WebViewController.swift in Sources */,
|
791887952A80C361007EA0C1 /* WebViewController.swift in Sources */,
|
||||||
79CECC192A89EE6A00B95D8B /* ReviewFailedController.swift in Sources */,
|
79CECC192A89EE6A00B95D8B /* ReviewFailedController.swift in Sources */,
|
||||||
@@ -952,6 +967,7 @@
|
|||||||
791887432A7CCCCD007EA0C1 /* SceneDelegate.swift in Sources */,
|
791887432A7CCCCD007EA0C1 /* SceneDelegate.swift in Sources */,
|
||||||
791887C12A839784007EA0C1 /* RefuseOrderEntryView.swift in Sources */,
|
791887C12A839784007EA0C1 /* RefuseOrderEntryView.swift in Sources */,
|
||||||
7918877E2A7CE5AD007EA0C1 /* NotificationStrings.swift in Sources */,
|
7918877E2A7CE5AD007EA0C1 /* NotificationStrings.swift in Sources */,
|
||||||
|
79E4342A2AA5833F00AEB16C /* CustomPicker.swift in Sources */,
|
||||||
79CECC1B2A89F83800B95D8B /* AdditionalPhotoController.swift in Sources */,
|
79CECC1B2A89F83800B95D8B /* AdditionalPhotoController.swift in Sources */,
|
||||||
79FB76222A9EEED900DB00A4 /* CommonKeyStrings.swift in Sources */,
|
79FB76222A9EEED900DB00A4 /* CommonKeyStrings.swift in Sources */,
|
||||||
79DD0DBB2A971EB300768FE7 /* ZDViewController.swift in Sources */,
|
79DD0DBB2A971EB300768FE7 /* ZDViewController.swift in Sources */,
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<key>OrderSchedulingNotificationService.xcscheme_^#shared#^_</key>
|
<key>OrderSchedulingNotificationService.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>40</integer>
|
<integer>41</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SuppressBuildableAutocreation</key>
|
<key>SuppressBuildableAutocreation</key>
|
||||||
|
|||||||
Binary file not shown.
@@ -253,8 +253,8 @@
|
|||||||
filePath = "OrderScheduling/Main/Initial.swift"
|
filePath = "OrderScheduling/Main/Initial.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "93"
|
startingLineNumber = "119"
|
||||||
endingLineNumber = "93"
|
endingLineNumber = "119"
|
||||||
landmarkName = "networkErrorHandler(response:)"
|
landmarkName = "networkErrorHandler(response:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -269,8 +269,8 @@
|
|||||||
filePath = "OrderScheduling/Main/Initial.swift"
|
filePath = "OrderScheduling/Main/Initial.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "94"
|
startingLineNumber = "120"
|
||||||
endingLineNumber = "94"
|
endingLineNumber = "120"
|
||||||
landmarkName = "networkErrorHandler(response:)"
|
landmarkName = "networkErrorHandler(response:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
<Locations>
|
<Locations>
|
||||||
@@ -317,8 +317,8 @@
|
|||||||
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "598"
|
startingLineNumber = "599"
|
||||||
endingLineNumber = "598"
|
endingLineNumber = "599"
|
||||||
landmarkName = "tableView(_:cellForRowAt:)"
|
landmarkName = "tableView(_:cellForRowAt:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -539,8 +539,8 @@
|
|||||||
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "840"
|
startingLineNumber = "844"
|
||||||
endingLineNumber = "840"
|
endingLineNumber = "844"
|
||||||
landmarkName = "collectionView(_:cellForItemAt:)"
|
landmarkName = "collectionView(_:cellForItemAt:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -682,8 +682,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "71"
|
startingLineNumber = "91"
|
||||||
endingLineNumber = "71"
|
endingLineNumber = "91"
|
||||||
landmarkName = "tableView(_:cellForRowAt:)"
|
landmarkName = "tableView(_:cellForRowAt:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -698,8 +698,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "310"
|
startingLineNumber = "306"
|
||||||
endingLineNumber = "310"
|
endingLineNumber = "306"
|
||||||
landmarkName = "dd_mapView(_:viewFor:)"
|
landmarkName = "dd_mapView(_:viewFor:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -714,8 +714,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "288"
|
startingLineNumber = "284"
|
||||||
endingLineNumber = "288"
|
endingLineNumber = "284"
|
||||||
landmarkName = "dd_mapView(_:viewFor:)"
|
landmarkName = "dd_mapView(_:viewFor:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -730,8 +730,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "290"
|
startingLineNumber = "286"
|
||||||
endingLineNumber = "290"
|
endingLineNumber = "286"
|
||||||
landmarkName = "dd_mapView(_:viewFor:)"
|
landmarkName = "dd_mapView(_:viewFor:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -746,8 +746,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "316"
|
startingLineNumber = "312"
|
||||||
endingLineNumber = "316"
|
endingLineNumber = "312"
|
||||||
landmarkName = "dd_mapView(_:viewFor:)"
|
landmarkName = "dd_mapView(_:viewFor:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -762,8 +762,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "315"
|
startingLineNumber = "311"
|
||||||
endingLineNumber = "315"
|
endingLineNumber = "311"
|
||||||
landmarkName = "dd_mapView(_:viewFor:)"
|
landmarkName = "dd_mapView(_:viewFor:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1082,8 +1082,8 @@
|
|||||||
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "65"
|
startingLineNumber = "66"
|
||||||
endingLineNumber = "65"
|
endingLineNumber = "66"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
<Locations>
|
<Locations>
|
||||||
@@ -1573,8 +1573,8 @@
|
|||||||
filePath = "OrderScheduling/Main/Initial.swift"
|
filePath = "OrderScheduling/Main/Initial.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "79"
|
startingLineNumber = "105"
|
||||||
endingLineNumber = "79"
|
endingLineNumber = "105"
|
||||||
landmarkName = "changeRootViewController(window:)"
|
landmarkName = "changeRootViewController(window:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1605,8 +1605,8 @@
|
|||||||
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "239"
|
startingLineNumber = "256"
|
||||||
endingLineNumber = "239"
|
endingLineNumber = "256"
|
||||||
landmarkName = "reloadData()"
|
landmarkName = "reloadData()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1669,8 +1669,8 @@
|
|||||||
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "255"
|
startingLineNumber = "256"
|
||||||
endingLineNumber = "255"
|
endingLineNumber = "256"
|
||||||
landmarkName = "entry(model:remarkId:)"
|
landmarkName = "entry(model:remarkId:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1685,8 +1685,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "125"
|
startingLineNumber = "145"
|
||||||
endingLineNumber = "125"
|
endingLineNumber = "145"
|
||||||
landmarkName = "viewDidLoad()"
|
landmarkName = "viewDidLoad()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1701,8 +1701,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "126"
|
startingLineNumber = "146"
|
||||||
endingLineNumber = "126"
|
endingLineNumber = "146"
|
||||||
landmarkName = "viewDidLoad()"
|
landmarkName = "viewDidLoad()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1717,8 +1717,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "113"
|
startingLineNumber = "133"
|
||||||
endingLineNumber = "113"
|
endingLineNumber = "133"
|
||||||
landmarkName = "viewDidLoad()"
|
landmarkName = "viewDidLoad()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
<Locations>
|
<Locations>
|
||||||
@@ -1829,8 +1829,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "94"
|
startingLineNumber = "114"
|
||||||
endingLineNumber = "94"
|
endingLineNumber = "114"
|
||||||
landmarkName = "init(models:isPaiban:isAlarm:)"
|
landmarkName = "init(models:isPaiban:isAlarm:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -1845,8 +1845,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "87"
|
startingLineNumber = "107"
|
||||||
endingLineNumber = "87"
|
endingLineNumber = "107"
|
||||||
landmarkName = "VehicleMonitoringListController"
|
landmarkName = "VehicleMonitoringListController"
|
||||||
landmarkType = "3">
|
landmarkType = "3">
|
||||||
<Locations>
|
<Locations>
|
||||||
@@ -1953,8 +1953,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "86"
|
startingLineNumber = "106"
|
||||||
endingLineNumber = "86"
|
endingLineNumber = "106"
|
||||||
landmarkName = "VehicleMonitoringListController"
|
landmarkName = "VehicleMonitoringListController"
|
||||||
landmarkType = "3">
|
landmarkType = "3">
|
||||||
<Locations>
|
<Locations>
|
||||||
@@ -2038,22 +2038,6 @@
|
|||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
</BreakpointProxy>
|
</BreakpointProxy>
|
||||||
<BreakpointProxy
|
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
||||||
<BreakpointContent
|
|
||||||
uuid = "968CDC1F-2334-4CAC-89E8-B86BBB24D647"
|
|
||||||
shouldBeEnabled = "No"
|
|
||||||
ignoreCount = "0"
|
|
||||||
continueAfterRunningActions = "No"
|
|
||||||
filePath = "OrderScheduling/Main/SceneDelegate.swift"
|
|
||||||
startingColumnNumber = "9223372036854775807"
|
|
||||||
endingColumnNumber = "9223372036854775807"
|
|
||||||
startingLineNumber = "39"
|
|
||||||
endingLineNumber = "39"
|
|
||||||
landmarkName = "sceneDidBecomeActive(_:)"
|
|
||||||
landmarkType = "7">
|
|
||||||
</BreakpointContent>
|
|
||||||
</BreakpointProxy>
|
|
||||||
<BreakpointProxy
|
<BreakpointProxy
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
<BreakpointContent
|
<BreakpointContent
|
||||||
@@ -2205,8 +2189,8 @@
|
|||||||
filePath = "OrderScheduling/Main/Initial.swift"
|
filePath = "OrderScheduling/Main/Initial.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "70"
|
startingLineNumber = "96"
|
||||||
endingLineNumber = "70"
|
endingLineNumber = "96"
|
||||||
landmarkName = "initRootViewController()"
|
landmarkName = "initRootViewController()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2333,8 +2317,8 @@
|
|||||||
filePath = "OrderScheduling/Main/Initial.swift"
|
filePath = "OrderScheduling/Main/Initial.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "85"
|
startingLineNumber = "111"
|
||||||
endingLineNumber = "85"
|
endingLineNumber = "111"
|
||||||
landmarkName = "changeRootViewController(window:)"
|
landmarkName = "changeRootViewController(window:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2493,8 +2477,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringListController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "110"
|
startingLineNumber = "130"
|
||||||
endingLineNumber = "110"
|
endingLineNumber = "130"
|
||||||
landmarkName = "viewDidLoad()"
|
landmarkName = "viewDidLoad()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2509,8 +2493,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "564"
|
startingLineNumber = "560"
|
||||||
endingLineNumber = "564"
|
endingLineNumber = "560"
|
||||||
landmarkName = "viewDidAppear(_:)"
|
landmarkName = "viewDidAppear(_:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2525,8 +2509,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "517"
|
startingLineNumber = "513"
|
||||||
endingLineNumber = "517"
|
endingLineNumber = "513"
|
||||||
landmarkName = "viewDidLoad()"
|
landmarkName = "viewDidLoad()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2557,8 +2541,8 @@
|
|||||||
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "851"
|
startingLineNumber = "855"
|
||||||
endingLineNumber = "851"
|
endingLineNumber = "855"
|
||||||
landmarkName = "collectionView(_:didSelectItemAt:)"
|
landmarkName = "collectionView(_:didSelectItemAt:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2790,8 +2774,8 @@
|
|||||||
filePath = "OrderScheduling/Global/Tool/Tool.swift"
|
filePath = "OrderScheduling/Global/Tool/Tool.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "199"
|
startingLineNumber = "206"
|
||||||
endingLineNumber = "199"
|
endingLineNumber = "206"
|
||||||
landmarkName = "cycleVoice()"
|
landmarkName = "cycleVoice()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2806,8 +2790,8 @@
|
|||||||
filePath = "OrderScheduling/Global/Tool/Tool.swift"
|
filePath = "OrderScheduling/Global/Tool/Tool.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "201"
|
startingLineNumber = "208"
|
||||||
endingLineNumber = "201"
|
endingLineNumber = "208"
|
||||||
landmarkName = "cycleVoice()"
|
landmarkName = "cycleVoice()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2822,8 +2806,8 @@
|
|||||||
filePath = "OrderScheduling/Global/Tool/Tool.swift"
|
filePath = "OrderScheduling/Global/Tool/Tool.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "200"
|
startingLineNumber = "207"
|
||||||
endingLineNumber = "200"
|
endingLineNumber = "207"
|
||||||
landmarkName = "cycleVoice()"
|
landmarkName = "cycleVoice()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2838,8 +2822,8 @@
|
|||||||
filePath = "OrderScheduling/Global/Tool/Tool.swift"
|
filePath = "OrderScheduling/Global/Tool/Tool.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "202"
|
startingLineNumber = "209"
|
||||||
endingLineNumber = "202"
|
endingLineNumber = "209"
|
||||||
landmarkName = "cycleVoice()"
|
landmarkName = "cycleVoice()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2854,8 +2838,8 @@
|
|||||||
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "330"
|
startingLineNumber = "331"
|
||||||
endingLineNumber = "330"
|
endingLineNumber = "331"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2870,8 +2854,8 @@
|
|||||||
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "319"
|
startingLineNumber = "320"
|
||||||
endingLineNumber = "319"
|
endingLineNumber = "320"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -2886,8 +2870,8 @@
|
|||||||
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "321"
|
startingLineNumber = "322"
|
||||||
endingLineNumber = "321"
|
endingLineNumber = "322"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -3061,8 +3045,8 @@
|
|||||||
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "125"
|
startingLineNumber = "121"
|
||||||
endingLineNumber = "125"
|
endingLineNumber = "121"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -3077,8 +3061,8 @@
|
|||||||
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "95"
|
startingLineNumber = "96"
|
||||||
endingLineNumber = "95"
|
endingLineNumber = "96"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -3157,8 +3141,8 @@
|
|||||||
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "238"
|
startingLineNumber = "255"
|
||||||
endingLineNumber = "238"
|
endingLineNumber = "255"
|
||||||
landmarkName = "reloadData()"
|
landmarkName = "reloadData()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -3173,8 +3157,8 @@
|
|||||||
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "237"
|
startingLineNumber = "254"
|
||||||
endingLineNumber = "237"
|
endingLineNumber = "254"
|
||||||
landmarkName = "reloadData()"
|
landmarkName = "reloadData()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -3189,8 +3173,8 @@
|
|||||||
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "193"
|
startingLineNumber = "210"
|
||||||
endingLineNumber = "193"
|
endingLineNumber = "210"
|
||||||
landmarkName = "viewDidLoad()"
|
landmarkName = "viewDidLoad()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -3205,8 +3189,8 @@
|
|||||||
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "187"
|
startingLineNumber = "204"
|
||||||
endingLineNumber = "187"
|
endingLineNumber = "204"
|
||||||
landmarkName = "viewDidLoad()"
|
landmarkName = "viewDidLoad()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -3221,8 +3205,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "322"
|
startingLineNumber = "318"
|
||||||
endingLineNumber = "322"
|
endingLineNumber = "318"
|
||||||
landmarkName = "dd_mapView(_:viewFor:)"
|
landmarkName = "dd_mapView(_:viewFor:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
<Locations>
|
<Locations>
|
||||||
@@ -3269,8 +3253,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "194"
|
startingLineNumber = "190"
|
||||||
endingLineNumber = "194"
|
endingLineNumber = "190"
|
||||||
landmarkName = "dd_mapView(_:viewFor:)"
|
landmarkName = "dd_mapView(_:viewFor:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
<Locations>
|
<Locations>
|
||||||
@@ -3317,8 +3301,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "491"
|
startingLineNumber = "487"
|
||||||
endingLineNumber = "491"
|
endingLineNumber = "487"
|
||||||
landmarkName = "reloadData(index:)"
|
landmarkName = "reloadData(index:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -3333,8 +3317,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "489"
|
startingLineNumber = "485"
|
||||||
endingLineNumber = "489"
|
endingLineNumber = "485"
|
||||||
landmarkName = "reloadData(index:)"
|
landmarkName = "reloadData(index:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -3349,8 +3333,8 @@
|
|||||||
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
filePath = "OrderScheduling/VehicleMonitoring/ViewController/VehicleMonitoringController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "492"
|
startingLineNumber = "488"
|
||||||
endingLineNumber = "492"
|
endingLineNumber = "488"
|
||||||
landmarkName = "reloadData(index:)"
|
landmarkName = "reloadData(index:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -3514,22 +3498,6 @@
|
|||||||
</Locations>
|
</Locations>
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
</BreakpointProxy>
|
</BreakpointProxy>
|
||||||
<BreakpointProxy
|
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
|
||||||
<BreakpointContent
|
|
||||||
uuid = "7FF44C67-B21B-4E15-BAE0-775D83722B04"
|
|
||||||
shouldBeEnabled = "No"
|
|
||||||
ignoreCount = "0"
|
|
||||||
continueAfterRunningActions = "No"
|
|
||||||
filePath = "OrderScheduling/Main/SceneDelegate.swift"
|
|
||||||
startingColumnNumber = "9223372036854775807"
|
|
||||||
endingColumnNumber = "9223372036854775807"
|
|
||||||
startingLineNumber = "38"
|
|
||||||
endingLineNumber = "38"
|
|
||||||
landmarkName = "sceneDidBecomeActive(_:)"
|
|
||||||
landmarkType = "7">
|
|
||||||
</BreakpointContent>
|
|
||||||
</BreakpointProxy>
|
|
||||||
<BreakpointProxy
|
<BreakpointProxy
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
<BreakpointContent
|
<BreakpointContent
|
||||||
@@ -3556,8 +3524,8 @@
|
|||||||
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "76"
|
startingLineNumber = "77"
|
||||||
endingLineNumber = "76"
|
endingLineNumber = "77"
|
||||||
landmarkName = "addActions()"
|
landmarkName = "addActions()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@@ -3581,7 +3549,103 @@
|
|||||||
<BreakpointProxy
|
<BreakpointProxy
|
||||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
<BreakpointContent
|
<BreakpointContent
|
||||||
uuid = "D3F8E303-2A18-4414-8162-F89FB11A47F9"
|
uuid = "E4297D03-4063-4D45-AB9B-81F44210A191"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Rescue/ViewController/RescueController.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "938"
|
||||||
|
endingLineNumber = "938"
|
||||||
|
landmarkName = "RescueController"
|
||||||
|
landmarkType = "3">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "D656156F-B4F0-4072-A29F-67B6E358E912"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Common/Model/SystemCall.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "37"
|
||||||
|
endingLineNumber = "37"
|
||||||
|
landmarkName = "callEvent(successHandler:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "9EC31AE0-3786-4AAF-AE8C-E575AE453781"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Common/Model/SystemCall.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "60"
|
||||||
|
endingLineNumber = "60"
|
||||||
|
landmarkName = "callEvent(successHandler:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "85322ACD-D5C3-4A91-ACA4-19D55BF1D9DF"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Main/SceneDelegate.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "37"
|
||||||
|
endingLineNumber = "37"
|
||||||
|
landmarkName = "sceneDidBecomeActive(_:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
<Locations>
|
||||||
|
<Location
|
||||||
|
uuid = "85322ACD-D5C3-4A91-ACA4-19D55BF1D9DF - a7950a51e299efe1"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
symbolName = "OrderScheduling.SceneDelegate.sceneDidBecomeActive(__C.UIScene) -> ()"
|
||||||
|
moduleName = "OrderScheduling"
|
||||||
|
usesParentBreakpointCondition = "Yes"
|
||||||
|
urlString = "file:///Users/zd/Desktop/%E4%B8%AD%E9%81%93%E6%95%91%E6%8F%B4/OrderScheduling/OrderScheduling/Main/SceneDelegate.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "41"
|
||||||
|
endingLineNumber = "41"
|
||||||
|
offsetFromSymbolStart = "148">
|
||||||
|
</Location>
|
||||||
|
<Location
|
||||||
|
uuid = "85322ACD-D5C3-4A91-ACA4-19D55BF1D9DF - a7950a51e299ee6d"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
symbolName = "OrderScheduling.SceneDelegate.sceneDidBecomeActive(__C.UIScene) -> ()"
|
||||||
|
moduleName = "OrderScheduling"
|
||||||
|
usesParentBreakpointCondition = "Yes"
|
||||||
|
urlString = "file:///Users/zd/Desktop/%E4%B8%AD%E9%81%93%E6%95%91%E6%8F%B4/OrderScheduling/OrderScheduling/Main/SceneDelegate.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "37"
|
||||||
|
endingLineNumber = "37"
|
||||||
|
offsetFromSymbolStart = "44">
|
||||||
|
</Location>
|
||||||
|
</Locations>
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "AFA72424-943C-48E2-B77E-23961206B995"
|
||||||
shouldBeEnabled = "No"
|
shouldBeEnabled = "No"
|
||||||
ignoreCount = "0"
|
ignoreCount = "0"
|
||||||
continueAfterRunningActions = "No"
|
continueAfterRunningActions = "No"
|
||||||
@@ -3590,7 +3654,199 @@
|
|||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "47"
|
startingLineNumber = "47"
|
||||||
endingLineNumber = "47"
|
endingLineNumber = "47"
|
||||||
landmarkName = "sceneDidBecomeActive(_:)"
|
landmarkName = "sceneWillResignActive(_:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "F4F04405-4964-455D-A1A1-947904B789DF"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Main/SceneDelegate.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "57"
|
||||||
|
endingLineNumber = "57"
|
||||||
|
landmarkName = "sceneWillEnterForeground(_:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "68E4F1E7-2BE3-44AF-B4DE-31318DC77213"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Common/Model/SystemCall.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "58"
|
||||||
|
endingLineNumber = "58"
|
||||||
|
landmarkName = "callEvent(successHandler:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "DD0B231D-92EA-4290-B0CA-FD6DEBC9CD83"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Common/Model/SystemCall.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "43"
|
||||||
|
endingLineNumber = "43"
|
||||||
|
landmarkName = "callEvent(successHandler:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "BD683ED1-1785-42C4-9E0B-BCB9BCEFF02B"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Common/Model/SystemCall.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "40"
|
||||||
|
endingLineNumber = "40"
|
||||||
|
landmarkName = "callEvent(successHandler:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "EA6C51B6-E545-4F07-B240-7CF60A59D880"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Main/SceneDelegate.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "66"
|
||||||
|
endingLineNumber = "66"
|
||||||
|
landmarkName = "sceneDidEnterBackground(_:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "22B5E26E-1E0D-46D9-885B-2273AE78C919"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Common/Model/SystemCall.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "41"
|
||||||
|
endingLineNumber = "41"
|
||||||
|
landmarkName = "callEvent(successHandler:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "AD3AD3C1-2FF5-409A-8C90-5A0683B59D68"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Main/SceneDelegate.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "59"
|
||||||
|
endingLineNumber = "59"
|
||||||
|
landmarkName = "sceneWillEnterForeground(_:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "EA253642-97B2-4B0E-BE7A-DDDC10F6117B"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Common/View/MessageCount.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "50"
|
||||||
|
endingLineNumber = "50"
|
||||||
|
landmarkName = "init()"
|
||||||
|
landmarkType = "7">
|
||||||
|
<Locations>
|
||||||
|
<Location
|
||||||
|
uuid = "EA253642-97B2-4B0E-BE7A-DDDC10F6117B - 7617f98281ad1284"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
symbolName = "closure #4 (Swift.Optional<OrderScheduling.ResponseModel<Swift.Array<OrderScheduling.OrderListDataModel>>>) -> () in OrderScheduling.MessageCount.init() -> OrderScheduling.MessageCount"
|
||||||
|
moduleName = "OrderScheduling"
|
||||||
|
usesParentBreakpointCondition = "Yes"
|
||||||
|
urlString = "file:///Users/zd/Desktop/%E4%B8%AD%E9%81%93%E6%95%91%E6%8F%B4/OrderScheduling/OrderScheduling/Common/View/MessageCount.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "50"
|
||||||
|
endingLineNumber = "50"
|
||||||
|
offsetFromSymbolStart = "48">
|
||||||
|
</Location>
|
||||||
|
<Location
|
||||||
|
uuid = "EA253642-97B2-4B0E-BE7A-DDDC10F6117B - 7617f98281ad1284"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
symbolName = "closure #4 (Swift.Optional<OrderScheduling.ResponseModel<Swift.Array<OrderScheduling.OrderListDataModel>>>) -> () in OrderScheduling.MessageCount.init() -> OrderScheduling.MessageCount"
|
||||||
|
moduleName = "OrderScheduling"
|
||||||
|
usesParentBreakpointCondition = "Yes"
|
||||||
|
urlString = "file:///Users/zd/Desktop/%E4%B8%AD%E9%81%93%E6%95%91%E6%8F%B4/OrderScheduling/OrderScheduling/Common/View/MessageCount.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "50"
|
||||||
|
endingLineNumber = "50"
|
||||||
|
offsetFromSymbolStart = "460">
|
||||||
|
</Location>
|
||||||
|
</Locations>
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "48C18612-08BC-4AB2-ADB3-20A82C1CCEC4"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/Common/View/MessageCount.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "60"
|
||||||
|
endingLineNumber = "60"
|
||||||
|
landmarkName = "newestMessage()"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "F2D8383F-3163-43DB-917A-F88D56270593"
|
||||||
|
shouldBeEnabled = "No"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "OrderScheduling/ReviewFailed/ViewController/ReviewFailedController.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "188"
|
||||||
|
endingLineNumber = "188"
|
||||||
|
landmarkName = "init(nibName:bundle:)"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
</BreakpointProxy>
|
</BreakpointProxy>
|
||||||
|
|||||||
BIN
OrderScheduling/.DS_Store
vendored
BIN
OrderScheduling/.DS_Store
vendored
Binary file not shown.
BIN
OrderScheduling/Common/.DS_Store
vendored
BIN
OrderScheduling/Common/.DS_Store
vendored
Binary file not shown.
@@ -15,9 +15,11 @@ open class MessageCount : NSObject {
|
|||||||
public static let `default` = MessageCount()
|
public static let `default` = MessageCount()
|
||||||
private let disposeBag = DisposeBag()
|
private let disposeBag = DisposeBag()
|
||||||
private let reloadToDoMessageCountRelay = ReplayRelay<Any?>.create(bufferSize: 1)
|
private let reloadToDoMessageCountRelay = ReplayRelay<Any?>.create(bufferSize: 1)
|
||||||
|
private let reloadReviewFailedMessageCountRelay = ReplayRelay<Any?>.create(bufferSize: 1)
|
||||||
public var messageCountRelay = ReplayRelay<Int>.create(bufferSize: 1)
|
public var messageCountRelay = ReplayRelay<Int>.create(bufferSize: 1)
|
||||||
public var pendingCountRelay = ReplayRelay<Int>.create(bufferSize: 1)
|
public var pendingCountRelay = ReplayRelay<Int>.create(bufferSize: 1)
|
||||||
|
public var reviewFailedCountRelay = ReplayRelay<Int>.create(bufferSize: 1)
|
||||||
|
|
||||||
public override init() {
|
public override init() {
|
||||||
super.init()
|
super.init()
|
||||||
|
|
||||||
@@ -39,9 +41,22 @@ open class MessageCount : NSObject {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.disposed(by: disposeBag)
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
|
Observable.combineLatest(reloadReviewFailedMessageCountRelay, USER.refreshTokenSub)
|
||||||
|
.flatMapLatest { (_,_) in
|
||||||
|
return RQ.orderList(parameters: OrderListParameters(pageNum: 1, queryType: .TO_AUDIT_FAILED))
|
||||||
|
}
|
||||||
|
.subscribe(onNext: {[weak self] response in
|
||||||
|
if response?.success == true,let total = response?.total {
|
||||||
|
self?.reviewFailedCountRelay.accept(total)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func newestMessage() {
|
func newestMessage() {
|
||||||
reloadToDoMessageCountRelay.accept(nil)
|
reloadToDoMessageCountRelay.accept(nil)
|
||||||
|
reloadReviewFailedMessageCountRelay.accept(nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
31
OrderScheduling/Global/Tool/CustomPicker.swift
Normal file
31
OrderScheduling/Global/Tool/CustomPicker.swift
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
//
|
||||||
|
// CustomPicker.swift
|
||||||
|
// OrderScheduling
|
||||||
|
//
|
||||||
|
// Created by 中道 on 2023/9/4.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import BRPickerView
|
||||||
|
|
||||||
|
public let CP = CustomPicker.default
|
||||||
|
|
||||||
|
open class CustomPicker {
|
||||||
|
public static let `default` = CustomPicker()
|
||||||
|
|
||||||
|
func showItems(items:[String],selectedIndex:Int? = nil,selectedItem:String? = nil,resultHandler:@escaping ((BRResultModel?) -> Void)) {
|
||||||
|
let pickerView = BRStringPickerView()
|
||||||
|
if selectedItem != nil {
|
||||||
|
pickerView.selectValue = selectedItem!
|
||||||
|
}
|
||||||
|
if selectedIndex != nil {
|
||||||
|
pickerView.selectIndex = selectedIndex!
|
||||||
|
}
|
||||||
|
|
||||||
|
pickerView.dataSourceArr = items
|
||||||
|
pickerView.resultModelBlock = { result in
|
||||||
|
resultHandler(result)
|
||||||
|
}
|
||||||
|
pickerView.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
96
OrderScheduling/Global/Tool/SystemCall.swift
Normal file
96
OrderScheduling/Global/Tool/SystemCall.swift
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
//
|
||||||
|
// SystemCall.swift
|
||||||
|
// OrderScheduling
|
||||||
|
//
|
||||||
|
// Created by 中道 on 2023/9/1.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import CoreTelephony
|
||||||
|
import RxSwift
|
||||||
|
import RxRelay
|
||||||
|
|
||||||
|
public let SC = SystemCall.default
|
||||||
|
|
||||||
|
open class SystemCall {
|
||||||
|
public static let `default` = SystemCall()
|
||||||
|
|
||||||
|
private let callCenter : CTCallCenter
|
||||||
|
|
||||||
|
public var callSuccess : Bool
|
||||||
|
|
||||||
|
private var isDialing : Bool = false
|
||||||
|
|
||||||
|
private var isConnected : Bool = false
|
||||||
|
|
||||||
|
private var isDisconnected : Bool = false
|
||||||
|
|
||||||
|
private var callTime : String?
|
||||||
|
|
||||||
|
private var connectTimeInterval : TimeInterval?
|
||||||
|
|
||||||
|
private var disconnectTimeInterval : TimeInterval?
|
||||||
|
|
||||||
|
private var duration : Int?
|
||||||
|
|
||||||
|
public var userOrderId : Int?
|
||||||
|
|
||||||
|
public var orderCode : String?
|
||||||
|
|
||||||
|
public var taskOrderId : Int?
|
||||||
|
|
||||||
|
public var uploadRelay = ReplayRelay<Any?>.create(bufferSize: 1)
|
||||||
|
|
||||||
|
init() {
|
||||||
|
callCenter = CTCallCenter()
|
||||||
|
callSuccess = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func callEvent(successHandler: ((Bool,String?,Int?) -> Void)? = nil) {
|
||||||
|
callCenter.callEventHandler = {[weak self] call in
|
||||||
|
switch call.callState {
|
||||||
|
case "CTCallStateDialing":
|
||||||
|
self?.isDialing = true
|
||||||
|
self?.callTime = TOOL.getDateString(by: "yyyy-MM-dd HH:mm:ss", date: Date())
|
||||||
|
break
|
||||||
|
case "CTCallStateIncoming":
|
||||||
|
self?.isDialing = false
|
||||||
|
break
|
||||||
|
case "CTCallStateConnected":
|
||||||
|
self?.isConnected = true
|
||||||
|
self?.connectTimeInterval = Date().timeIntervalSince1970
|
||||||
|
break
|
||||||
|
case "CTCallStateDisconnected":
|
||||||
|
self?.isDisconnected = true
|
||||||
|
self?.disconnectTimeInterval = Date().timeIntervalSince1970
|
||||||
|
|
||||||
|
if self?.isDialing == true && self?.isConnected == true {
|
||||||
|
self?.callSuccess = true
|
||||||
|
if successHandler != nil {
|
||||||
|
var duration = 0
|
||||||
|
if let disconnectTimeInterval = self?.disconnectTimeInterval,let connectTimeInterval = self?.connectTimeInterval {
|
||||||
|
duration = Int(disconnectTimeInterval - connectTimeInterval)
|
||||||
|
self?.duration = duration
|
||||||
|
}
|
||||||
|
successHandler!(true,self?.callTime,duration)
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
self?.callSuccess = false
|
||||||
|
if successHandler != nil {
|
||||||
|
successHandler!(false,self?.callTime,0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func getParameters() -> Single<UploadCallRecordParameters> {
|
||||||
|
return Single.create {[weak self] single in
|
||||||
|
single(.success(UploadCallRecordParameters(userOrderId: self?.userOrderId ?? 0, orderCode: self?.orderCode ?? "", taskOrderId: self?.taskOrderId ?? 0, state: self?.callSuccess == true ? 1 : 2, callTime: self?.callTime ?? "", duration: self?.duration ?? 0)))
|
||||||
|
return Disposables.create()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -47,7 +47,8 @@ open class Tool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if #available(iOS 10.0, *) {
|
if #available(iOS 10.0, *) {
|
||||||
UIApplication.shared.open(url, options: [:],completionHandler: nil)
|
UIApplication.shared.open(url, options: [:]) { isSuccess in
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
UIApplication.shared.openURL(url)
|
UIApplication.shared.openURL(url)
|
||||||
}
|
}
|
||||||
@@ -82,6 +83,12 @@ open class Tool {
|
|||||||
return dateString
|
return dateString
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func getDateString(by dateFormat:String,date:Date) -> String {
|
||||||
|
let format = DateFormatter()
|
||||||
|
format.dateFormat = dateFormat
|
||||||
|
return format.string(from: date)
|
||||||
|
}
|
||||||
|
|
||||||
public func getVersion() -> String {
|
public func getVersion() -> String {
|
||||||
return (Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String) ?? "1.0.0"
|
return (Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String) ?? "1.0.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,4 +53,6 @@ open class ApiList {
|
|||||||
public let readMessageReminder = "/supplierAppV2/dispatchApp/toDoMessage/readMessageReminder"
|
public let readMessageReminder = "/supplierAppV2/dispatchApp/toDoMessage/readMessageReminder"
|
||||||
|
|
||||||
public let checkLogin = "/supplierAppV2/open/checkLogin"
|
public let checkLogin = "/supplierAppV2/open/checkLogin"
|
||||||
|
|
||||||
|
public let uploadCallRecord = "/supplierAppV2/dispatchApp/order/uploadCallRecord"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -143,3 +143,12 @@ public struct MessageReminderListParameters : Encodable {
|
|||||||
public struct ReadMessageReminderParameters : Encodable {
|
public struct ReadMessageReminderParameters : Encodable {
|
||||||
var id : Int
|
var id : Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct UploadCallRecordParameters : Encodable {
|
||||||
|
var userOrderId : Int
|
||||||
|
var orderCode : String
|
||||||
|
var taskOrderId : Int
|
||||||
|
var state : Int
|
||||||
|
var callTime : String
|
||||||
|
var duration : Int
|
||||||
|
}
|
||||||
|
|||||||
@@ -103,4 +103,8 @@ open class RequestList {
|
|||||||
func readMessageReminder(parameters:Encodable) -> Single<ResponseModel<String>?> {
|
func readMessageReminder(parameters:Encodable) -> Single<ResponseModel<String>?> {
|
||||||
return DDAF.post(urlString: HOST+API.readMessageReminder,parameters: parameters,encoding: JSONParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<String>.self)
|
return DDAF.post(urlString: HOST+API.readMessageReminder,parameters: parameters,encoding: JSONParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<String>.self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func uploadCallRecord(parameters:Encodable) -> Single<ResponseModel<String>?> {
|
||||||
|
return DDAF.post(urlString: HOST+API.uploadCallRecord,parameters: parameters,encoding: JSONParameterEncoder.default,headers: [tokenHeader()],responseType: ResponseModel<String>.self)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ class ResponseModel<T:Decodable> : Decodable {
|
|||||||
var data : T?
|
var data : T?
|
||||||
var time : Int?
|
var time : Int?
|
||||||
var success : Bool?
|
var success : Bool?
|
||||||
|
var total : Int?
|
||||||
}
|
}
|
||||||
|
|
||||||
class LoginDataModel : Decodable {
|
class LoginDataModel : Decodable {
|
||||||
|
|||||||
@@ -15,10 +15,14 @@ import DDToastKit_Private
|
|||||||
import DDCategoryKit_Private
|
import DDCategoryKit_Private
|
||||||
import DDControlsKit_Private
|
import DDControlsKit_Private
|
||||||
import CocoaDebug
|
import CocoaDebug
|
||||||
|
import RxSwift
|
||||||
|
|
||||||
class Initial : NSObject {
|
class Initial : NSObject {
|
||||||
static let shareInstance = Initial.init()
|
static let shareInstance = Initial.init()
|
||||||
|
|
||||||
|
private let disposeBag = DisposeBag()
|
||||||
|
|
||||||
|
private let locationManager = CLLocationManager()
|
||||||
// MARK: <Third>
|
// MARK: <Third>
|
||||||
func initThirdLib() {
|
func initThirdLib() {
|
||||||
// 键盘
|
// 键盘
|
||||||
@@ -33,6 +37,9 @@ class Initial : NSObject {
|
|||||||
// af
|
// af
|
||||||
initAF()
|
initAF()
|
||||||
|
|
||||||
|
// call
|
||||||
|
initCall()
|
||||||
|
|
||||||
// cocoadebug
|
// cocoadebug
|
||||||
initCocoaDebug()
|
initCocoaDebug()
|
||||||
}
|
}
|
||||||
@@ -44,6 +51,8 @@ class Initial : NSObject {
|
|||||||
func initMaMapKey(){
|
func initMaMapKey(){
|
||||||
DDMAMapView.start(withAppKey: MAAppKey)
|
DDMAMapView.start(withAppKey: MAAppKey)
|
||||||
DDMAMapView.agreePrivacy()
|
DDMAMapView.agreePrivacy()
|
||||||
|
|
||||||
|
locationManager.requestWhenInUseAuthorization()
|
||||||
}
|
}
|
||||||
|
|
||||||
func initAutoUI() {
|
func initAutoUI() {
|
||||||
@@ -58,6 +67,23 @@ class Initial : NSObject {
|
|||||||
CocoaDebug.hideBubble()
|
CocoaDebug.hideBubble()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func initCall() {
|
||||||
|
SC.callEvent { (isCallSuccess,callTime,duration) in
|
||||||
|
SC.uploadRelay.accept(nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
SC.uploadRelay
|
||||||
|
.flatMapLatest { _ in
|
||||||
|
return SC.getParameters()
|
||||||
|
}
|
||||||
|
.flatMapLatest { parameters in
|
||||||
|
return RQ.uploadCallRecord(parameters: parameters)
|
||||||
|
}
|
||||||
|
.subscribe(onNext: { response in
|
||||||
|
})
|
||||||
|
.disposed(by: disposeBag)
|
||||||
|
}
|
||||||
|
|
||||||
func initAppUpdate() {
|
func initAppUpdate() {
|
||||||
APPUPDATE.requestAppUpdateRelay.accept(.auto)
|
APPUPDATE.requestAppUpdateRelay.accept(.auto)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,17 +34,11 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func sceneDidBecomeActive(_ scene: UIScene) {
|
func sceneDidBecomeActive(_ scene: UIScene) {
|
||||||
// 后台收到通知后或者不点击通知打开app,激活时消除badge
|
|
||||||
JPUSHService.resetBadge()
|
|
||||||
UIApplication.shared.applicationIconBadgeNumber = 0
|
|
||||||
|
|
||||||
if USER.isLogin == true {
|
if USER.isLogin == true {
|
||||||
// 只有订单类型才会弹窗和声音
|
// 只有订单类型才会弹窗和声音
|
||||||
TOOL.dealWithOrderPushNotification { userInfo in
|
TOOL.dealWithOrderPushNotification { userInfo in
|
||||||
TOOL.playAlertWith(userInfo: userInfo)
|
TOOL.playAlertWith(userInfo: userInfo)
|
||||||
}
|
}
|
||||||
// app激活就要获取最新消息个数,要在refreshToken之后
|
|
||||||
MCOUNT.newestMessage()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,6 +50,14 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
|||||||
func sceneWillEnterForeground(_ scene: UIScene) {
|
func sceneWillEnterForeground(_ scene: UIScene) {
|
||||||
// Called as the scene transitions from the background to the foreground.
|
// Called as the scene transitions from the background to the foreground.
|
||||||
// Use this method to undo the changes made on entering the background.
|
// Use this method to undo the changes made on entering the background.
|
||||||
|
// 后台收到通知后或者不点击通知打开app,激活时消除badge
|
||||||
|
JPUSHService.resetBadge()
|
||||||
|
UIApplication.shared.applicationIconBadgeNumber = 0
|
||||||
|
|
||||||
|
if USER.isLogin == true {
|
||||||
|
// app激活就要获取最新消息个数,要在refreshToken之后
|
||||||
|
MCOUNT.newestMessage()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func sceneDidEnterBackground(_ scene: UIScene) {
|
func sceneDidEnterBackground(_ scene: UIScene) {
|
||||||
|
|||||||
@@ -28,6 +28,16 @@ extension RefuseOrderEntryView : UITextViewDelegate{
|
|||||||
})
|
})
|
||||||
.disposed(by: disposeBag)
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
|
timeTextFieldView.actionButton.rx.tap
|
||||||
|
.subscribe(onNext: {[weak self] _ in
|
||||||
|
CP.showItems(items: ["60","90","120","120分钟以上"],selectedItem: self?.timeTextFieldView.textFiled.text) {[weak self] result in
|
||||||
|
if let result {
|
||||||
|
self?.timeTextFieldView.textFiled.text = result.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
distanceView.selectButton.rx.tap
|
distanceView.selectButton.rx.tap
|
||||||
.subscribe(onNext: {[weak self] _ in
|
.subscribe(onNext: {[weak self] _ in
|
||||||
self?.distanceView.selectButton.isSelected = true
|
self?.distanceView.selectButton.isSelected = true
|
||||||
@@ -101,6 +111,7 @@ open class RefuseOrderEntryView :DDView {
|
|||||||
topView.addSubview(seperateLine)
|
topView.addSubview(seperateLine)
|
||||||
timeView.titleLabel.text = "时间长"
|
timeView.titleLabel.text = "时间长"
|
||||||
radiusView.addSubview(timeView)
|
radiusView.addSubview(timeView)
|
||||||
|
distanceView.isHidden = true
|
||||||
distanceView.titleLabel.text = "距离远"
|
distanceView.titleLabel.text = "距离远"
|
||||||
radiusView.addSubview(distanceView)
|
radiusView.addSubview(distanceView)
|
||||||
cannotDispatchView.titleLabel.text = "无法派出"
|
cannotDispatchView.titleLabel.text = "无法派出"
|
||||||
@@ -110,6 +121,8 @@ open class RefuseOrderEntryView :DDView {
|
|||||||
timeTextFieldView.layer.borderWidth = 1
|
timeTextFieldView.layer.borderWidth = 1
|
||||||
timeTextFieldView.titleLabel.text = "需要"
|
timeTextFieldView.titleLabel.text = "需要"
|
||||||
timeTextFieldView.unitLabel.text = "分钟"
|
timeTextFieldView.unitLabel.text = "分钟"
|
||||||
|
timeTextFieldView.textFiled.isUserInteractionEnabled = false
|
||||||
|
timeTextFieldView.actionButton.isHidden = false
|
||||||
timeTextFieldView.backgroundColor = .hex("ECF4F9")
|
timeTextFieldView.backgroundColor = .hex("ECF4F9")
|
||||||
radiusView.addSubview(timeTextFieldView)
|
radiusView.addSubview(timeTextFieldView)
|
||||||
distanceTextFieldView.layer.cornerRadius = auto(3)
|
distanceTextFieldView.layer.cornerRadius = auto(3)
|
||||||
@@ -163,13 +176,13 @@ open class RefuseOrderEntryView :DDView {
|
|||||||
|
|
||||||
timeView.snp.makeConstraints { make in
|
timeView.snp.makeConstraints { make in
|
||||||
make.centerY.equalTo(distanceView)
|
make.centerY.equalTo(distanceView)
|
||||||
make.right.equalTo(distanceView.snp.left).offset(-auto(30))
|
make.right.equalTo(distanceView.snp.centerX).offset(-auto(30))
|
||||||
make.width.height.equalTo(distanceView)
|
make.width.height.equalTo(distanceView)
|
||||||
}
|
}
|
||||||
|
|
||||||
cannotDispatchView.snp.makeConstraints { make in
|
cannotDispatchView.snp.makeConstraints { make in
|
||||||
make.centerY.equalTo(distanceView)
|
make.centerY.equalTo(distanceView)
|
||||||
make.left.equalTo(distanceView.snp.right).offset(auto(30))
|
make.left.equalTo(distanceView.snp.centerX).offset(auto(30))
|
||||||
make.width.height.equalTo(distanceView)
|
make.width.height.equalTo(distanceView)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,16 +251,20 @@ open class RefuseOrderEntryReasonView : DDView {
|
|||||||
open class RefuseOrderEntryTextFieldView : DDView {
|
open class RefuseOrderEntryTextFieldView : DDView {
|
||||||
public let titleLabel : DDLabel
|
public let titleLabel : DDLabel
|
||||||
public let textFiled : DDTextField
|
public let textFiled : DDTextField
|
||||||
|
public let actionButton : DDButton
|
||||||
public let unitLabel : DDLabel
|
public let unitLabel : DDLabel
|
||||||
public override init(frame: CGRect) {
|
public override init(frame: CGRect) {
|
||||||
titleLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(13)), textColor: .hex("3364B7"))
|
titleLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(13)), textColor: .hex("3364B7"))
|
||||||
textFiled = DDTextField()
|
textFiled = DDTextField()
|
||||||
|
actionButton = DDButton.dd_initCustom()
|
||||||
unitLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(13)), textColor: .hex("000000"))
|
unitLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(13)), textColor: .hex("000000"))
|
||||||
super.init(frame: frame)
|
super.init(frame: frame)
|
||||||
addSubview(titleLabel)
|
addSubview(titleLabel)
|
||||||
textFiled.textAlignment = .center
|
textFiled.textAlignment = .center
|
||||||
textFiled.keyboardType = .decimalPad
|
textFiled.keyboardType = .decimalPad
|
||||||
addSubview(textFiled)
|
addSubview(textFiled)
|
||||||
|
actionButton.isHidden = true
|
||||||
|
addSubview(actionButton)
|
||||||
addSubview(unitLabel)
|
addSubview(unitLabel)
|
||||||
titleLabel.snp.makeConstraints { make in
|
titleLabel.snp.makeConstraints { make in
|
||||||
make.left.equalTo(auto(16))
|
make.left.equalTo(auto(16))
|
||||||
@@ -264,6 +281,9 @@ open class RefuseOrderEntryTextFieldView : DDView {
|
|||||||
make.width.equalTo(auto(150))
|
make.width.equalTo(auto(150))
|
||||||
make.height.equalTo(auto(50))
|
make.height.equalTo(auto(50))
|
||||||
}
|
}
|
||||||
|
actionButton.snp.makeConstraints { make in
|
||||||
|
make.edges.equalTo(textFiled)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
required public init?(coder: NSCoder) {
|
required public init?(coder: NSCoder) {
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import RxSwift
|
|||||||
import RxRelay
|
import RxRelay
|
||||||
import MJRefresh
|
import MJRefresh
|
||||||
import DDWebImageKit_Private
|
import DDWebImageKit_Private
|
||||||
|
import ESTabBarController_swift
|
||||||
|
|
||||||
// MARK: Action
|
// MARK: Action
|
||||||
extension RescueController {
|
extension RescueController {
|
||||||
@@ -691,6 +692,9 @@ extension RescuePendingDispatchController : UITableViewDelegate,UITableViewDataS
|
|||||||
|
|
||||||
cell?.contactButton.rx.tap
|
cell?.contactButton.rx.tap
|
||||||
.subscribe(onNext: { _ in
|
.subscribe(onNext: { _ in
|
||||||
|
SC.userOrderId = model.userOrderId
|
||||||
|
SC.orderCode = model.orderCode
|
||||||
|
SC.taskOrderId = model.taskOrderId
|
||||||
TOOL.call(phone: model.userPhone)
|
TOOL.call(phone: model.userPhone)
|
||||||
})
|
})
|
||||||
.disposed(by: cell!.disposeBag)
|
.disposed(by: cell!.disposeBag)
|
||||||
@@ -887,11 +891,7 @@ class RescueController : ZDViewController {
|
|||||||
categoryView.backgroundColor = .hex("FAFAFA")
|
categoryView.backgroundColor = .hex("FAFAFA")
|
||||||
categoryView.delegate = self
|
categoryView.delegate = self
|
||||||
view.addSubview(categoryView)
|
view.addSubview(categoryView)
|
||||||
categoryView.snp.makeConstraints { make in
|
|
||||||
make.left.right.equalToSuperview()
|
|
||||||
make.top.equalTo(CGRectGetMaxY(navigationController?.navigationBar.frame ?? CGRectZero) + CGRectGetHeight(UIApplication.shared.dd_statusBarFrame))
|
|
||||||
make.height.equalTo(auto(44))
|
|
||||||
}
|
|
||||||
// 指示器
|
// 指示器
|
||||||
let indicator = JXCategoryIndicatorLineView()
|
let indicator = JXCategoryIndicatorLineView()
|
||||||
indicator.indicatorColor = .hex("3678FF")
|
indicator.indicatorColor = .hex("3678FF")
|
||||||
@@ -924,6 +924,12 @@ class RescueController : ZDViewController {
|
|||||||
|
|
||||||
override func viewSafeAreaInsetsDidChange() {
|
override func viewSafeAreaInsetsDidChange() {
|
||||||
super.viewSafeAreaInsetsDidChange()
|
super.viewSafeAreaInsetsDidChange()
|
||||||
|
categoryView.snp.makeConstraints { make in
|
||||||
|
make.left.right.equalToSuperview()
|
||||||
|
make.top.equalTo(view.safeAreaInsets.top)
|
||||||
|
make.height.equalTo(auto(44))
|
||||||
|
}
|
||||||
|
|
||||||
categoryContainerView?.snp.makeConstraints({ make in
|
categoryContainerView?.snp.makeConstraints({ make in
|
||||||
make.top.equalTo(categoryView.snp.bottom)
|
make.top.equalTo(categoryView.snp.bottom)
|
||||||
make.left.right.equalToSuperview()
|
make.left.right.equalToSuperview()
|
||||||
|
|||||||
@@ -115,10 +115,6 @@ extension ReviewFailedController {
|
|||||||
})
|
})
|
||||||
.disposed(by: disposeBag)
|
.disposed(by: disposeBag)
|
||||||
|
|
||||||
let item = tabBarItem as? ESTabBarItem
|
|
||||||
item?.badgeValue = "10"
|
|
||||||
item?.contentView?.updateLayout()
|
|
||||||
|
|
||||||
preRefreshRelay
|
preRefreshRelay
|
||||||
.observe(on: MainScheduler.instance)
|
.observe(on: MainScheduler.instance)
|
||||||
.subscribe(onNext: {[weak self] _ in
|
.subscribe(onNext: {[weak self] _ in
|
||||||
@@ -182,6 +178,27 @@ open class ReviewFailedController : ZDViewController {
|
|||||||
private let pendingView = MessageView()
|
private let pendingView = MessageView()
|
||||||
private var emptyView = EmptyView()
|
private var emptyView = EmptyView()
|
||||||
|
|
||||||
|
public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
|
||||||
|
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
|
||||||
|
MCOUNT.reviewFailedCountRelay
|
||||||
|
.observe(on: MainScheduler.instance)
|
||||||
|
.subscribe(onNext: {[weak self] count in
|
||||||
|
if let tabBar = self?.tabBarController?.tabBar as? ESTabBar {
|
||||||
|
let tabBarItem = tabBar.items?[1]
|
||||||
|
if count > 0 {
|
||||||
|
tabBarItem?.badgeValue = String(count)
|
||||||
|
}else{
|
||||||
|
tabBarItem?.badgeValue = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.disposed(by: disposeBag)
|
||||||
|
}
|
||||||
|
|
||||||
|
public required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
open override func viewDidLoad() {
|
open override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
dd_navigationItemTitle = "审核失败"
|
dd_navigationItemTitle = "审核失败"
|
||||||
|
|||||||
@@ -26,3 +26,10 @@ public let pushNoti_newOrder_key = "新订单"
|
|||||||
public let juheNewOrderAudio_key = "juheNewOrderAudio.wav"
|
public let juheNewOrderAudio_key = "juheNewOrderAudio.wav"
|
||||||
|
|
||||||
public let newOrderAudio_key = "newOrderAudio.wav"
|
public let newOrderAudio_key = "newOrderAudio.wav"
|
||||||
|
|
||||||
|
// 电话消息的键
|
||||||
|
public let noti_isCallSuccess_key = "isCallSuccess"
|
||||||
|
|
||||||
|
public let noti_callTime_key = "callTime"
|
||||||
|
|
||||||
|
public let noti_duration_key = "duration"
|
||||||
|
|||||||
@@ -14,3 +14,5 @@ public let Notification_logoutSuccessToLoginController = "Notification_logoutSuc
|
|||||||
public let Notification_dispatchOrderSuccessReloadIsRescuingController = "Notification_dispatchOrderSuccessReloadIsRescuingController"
|
public let Notification_dispatchOrderSuccessReloadIsRescuingController = "Notification_dispatchOrderSuccessReloadIsRescuingController"
|
||||||
|
|
||||||
public let Notification_dispatchOrderSuccessReloadPendingDispatchController = "Notification_dispatchOrderSuccessReloadPendingDispatchController"
|
public let Notification_dispatchOrderSuccessReloadPendingDispatchController = "Notification_dispatchOrderSuccessReloadPendingDispatchController"
|
||||||
|
|
||||||
|
public let Notification_callSuccessToRecord = "Notification_callSuccessToRecord"
|
||||||
|
|||||||
@@ -184,10 +184,6 @@ extension VehicleMonitoringController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension VehicleMonitoringController : DDMAMapViewDelegate {
|
extension VehicleMonitoringController : DDMAMapViewDelegate {
|
||||||
public func dd_mapViewRequireLocationAuth(_ locationManager: CLLocationManager) {
|
|
||||||
locationManager.requestWhenInUseAuthorization()
|
|
||||||
}
|
|
||||||
|
|
||||||
public func dd_mapView(_ mapView: MAMapView, viewFor annotation: MAAnnotation) -> MAAnnotationView {
|
public func dd_mapView(_ mapView: MAMapView, viewFor annotation: MAAnnotation) -> MAAnnotationView {
|
||||||
if annotation.isMember(of: MAPointAnnotation.self) {
|
if annotation.isMember(of: MAPointAnnotation.self) {
|
||||||
let pointAnnotation = annotation as! MAPointAnnotation
|
let pointAnnotation = annotation as! MAPointAnnotation
|
||||||
|
|||||||
@@ -28,13 +28,33 @@ extension VehicleMonitoringListController : UITableViewDelegate,UITableViewDataS
|
|||||||
cell?.icon.isHidden = !(model.isSelected ?? false)
|
cell?.icon.isHidden = !(model.isSelected ?? false)
|
||||||
cell?.indexLabel.text = String(indexPath.item + 1)+"."
|
cell?.indexLabel.text = String(indexPath.item + 1)+"."
|
||||||
if isPaiban == true {
|
if isPaiban == true {
|
||||||
cell?.dateLabel.text = (model.rosterStartTime?.components(separatedBy: " ").last ?? "") + "\n~\n" + (model.rosterEndTime?.components(separatedBy: " ").last ?? "")
|
cell?.dateLabel.text = (model.rosterStartTime?.components(separatedBy: " ").last ?? "") + "~" + (model.rosterEndTime?.components(separatedBy: " ").last ?? "")
|
||||||
|
cell?.phoneLabel.isHidden = true
|
||||||
|
cell?.dateLabel.snp.updateConstraints({ make in
|
||||||
|
make.width.equalTo(auto(160))
|
||||||
|
})
|
||||||
|
cell?.nameLabel.snp.updateConstraints({ make in
|
||||||
|
make.width.equalTo(auto(80))
|
||||||
|
})
|
||||||
|
cell?.phoneLabel.snp.updateConstraints({ make in
|
||||||
|
make.width.equalTo(0)
|
||||||
|
})
|
||||||
}else{
|
}else{
|
||||||
var status = model.vehicleStatus?.label ?? ""
|
var status = model.vehicleStatus?.label ?? ""
|
||||||
if model.onlineStatus?.code == .lostConnection {
|
if model.onlineStatus?.code == .lostConnection {
|
||||||
status = status + "," + (model.onlineStatus?.label ?? "掉线")
|
status = status + "," + (model.onlineStatus?.label ?? "掉线")
|
||||||
}
|
}
|
||||||
cell?.dateLabel.text = (model.vehicleName ?? "")+"/"+status
|
cell?.dateLabel.text = (model.vehicleName ?? "")+"/"+status
|
||||||
|
cell?.phoneLabel.isHidden = false
|
||||||
|
cell?.dateLabel.snp.updateConstraints({ make in
|
||||||
|
make.width.equalTo(auto(80))
|
||||||
|
})
|
||||||
|
cell?.nameLabel.snp.updateConstraints({ make in
|
||||||
|
make.width.equalTo(auto(60))
|
||||||
|
})
|
||||||
|
cell?.phoneLabel.snp.updateConstraints({ make in
|
||||||
|
make.width.equalTo(auto(100))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
cell?.nameLabel.text = model.driverName
|
cell?.nameLabel.text = model.driverName
|
||||||
cell?.phoneLabel.text = model.driverPhone
|
cell?.phoneLabel.text = model.driverPhone
|
||||||
|
|||||||
3
Podfile
3
Podfile
@@ -31,7 +31,8 @@ target 'OrderScheduling' do
|
|||||||
pod 'ZLPhotoBrowser'
|
pod 'ZLPhotoBrowser'
|
||||||
pod 'DDZFPlayerKit_Private',:subspecs => ['ControlView','ijkplayer']
|
pod 'DDZFPlayerKit_Private',:subspecs => ['ControlView','ijkplayer']
|
||||||
pod 'JPush',:modular_headers => true
|
pod 'JPush',:modular_headers => true
|
||||||
|
pod 'BRPickerView'
|
||||||
|
|
||||||
post_install do |installer|
|
post_install do |installer|
|
||||||
installer.pods_project.targets.each do |target|
|
installer.pods_project.targets.each do |target|
|
||||||
target.build_configurations.each do |config|
|
target.build_configurations.each do |config|
|
||||||
|
|||||||
17
Podfile.lock
17
Podfile.lock
@@ -10,6 +10,18 @@ PODS:
|
|||||||
- AMapTrack-NO-IDFA (1.4.2):
|
- AMapTrack-NO-IDFA (1.4.2):
|
||||||
- AMapFoundation-NO-IDFA (>= 1.6.4)
|
- AMapFoundation-NO-IDFA (>= 1.6.4)
|
||||||
- AMapLocation-NO-IDFA (>= 2.6.7)
|
- AMapLocation-NO-IDFA (>= 2.6.7)
|
||||||
|
- BRPickerView (2.8.1):
|
||||||
|
- BRPickerView/AddressPickerView (= 2.8.1)
|
||||||
|
- BRPickerView/Base (= 2.8.1)
|
||||||
|
- BRPickerView/DatePickerView (= 2.8.1)
|
||||||
|
- BRPickerView/StringPickerView (= 2.8.1)
|
||||||
|
- BRPickerView/AddressPickerView (2.8.1):
|
||||||
|
- BRPickerView/Base
|
||||||
|
- BRPickerView/Base (2.8.1)
|
||||||
|
- BRPickerView/DatePickerView (2.8.1):
|
||||||
|
- BRPickerView/Base
|
||||||
|
- BRPickerView/StringPickerView (2.8.1):
|
||||||
|
- BRPickerView/Base
|
||||||
- CocoaDebug (1.7.7)
|
- CocoaDebug (1.7.7)
|
||||||
- DDAutoUIKit_Private (0.1.3)
|
- DDAutoUIKit_Private (0.1.3)
|
||||||
- DDBasicControlsKit_Private/DDBaseAnimation/DDTransitionAnimation (0.3.2)
|
- DDBasicControlsKit_Private/DDBaseAnimation/DDTransitionAnimation (0.3.2)
|
||||||
@@ -282,6 +294,7 @@ PODS:
|
|||||||
- ZLPhotoBrowser/Core (4.4.3.2)
|
- ZLPhotoBrowser/Core (4.4.3.2)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
|
- BRPickerView
|
||||||
- CocoaDebug
|
- CocoaDebug
|
||||||
- DDAutoUIKit_Private
|
- DDAutoUIKit_Private
|
||||||
- DDCategoryKit_Private
|
- DDCategoryKit_Private
|
||||||
@@ -332,6 +345,7 @@ SPEC REPOS:
|
|||||||
- AMapNavi-NO-IDFA
|
- AMapNavi-NO-IDFA
|
||||||
- AMapSearch-NO-IDFA
|
- AMapSearch-NO-IDFA
|
||||||
- AMapTrack-NO-IDFA
|
- AMapTrack-NO-IDFA
|
||||||
|
- BRPickerView
|
||||||
- CocoaDebug
|
- CocoaDebug
|
||||||
- ESTabBarController-swift
|
- ESTabBarController-swift
|
||||||
- IQKeyboardManagerSwift
|
- IQKeyboardManagerSwift
|
||||||
@@ -355,6 +369,7 @@ SPEC CHECKSUMS:
|
|||||||
AMapNavi-NO-IDFA: 70c724400376bfadcb8ec08b9761f526096cfdb6
|
AMapNavi-NO-IDFA: 70c724400376bfadcb8ec08b9761f526096cfdb6
|
||||||
AMapSearch-NO-IDFA: 10cbd3ad7d122045a0c1f5760f6d46ff576ca918
|
AMapSearch-NO-IDFA: 10cbd3ad7d122045a0c1f5760f6d46ff576ca918
|
||||||
AMapTrack-NO-IDFA: 7109cf1867f5d6c407c8191492b1f73101e1682e
|
AMapTrack-NO-IDFA: 7109cf1867f5d6c407c8191492b1f73101e1682e
|
||||||
|
BRPickerView: 2531a2d4d0fea0b57a1c738de215af0f88863a2f
|
||||||
CocoaDebug: b38d31464b91a9775928f8667d114db07b136565
|
CocoaDebug: b38d31464b91a9775928f8667d114db07b136565
|
||||||
DDAutoUIKit_Private: 188066b4d13c8096676ddd9efa15974238f6dca3
|
DDAutoUIKit_Private: 188066b4d13c8096676ddd9efa15974238f6dca3
|
||||||
DDBasicControlsKit_Private: d3aebc505eaac273a8f6b85238662ad6e64a1a08
|
DDBasicControlsKit_Private: d3aebc505eaac273a8f6b85238662ad6e64a1a08
|
||||||
@@ -385,6 +400,6 @@ SPEC CHECKSUMS:
|
|||||||
SwiftEntryKit: 61b5fa36f34a97dd8013e48a7345bc4c4720be9a
|
SwiftEntryKit: 61b5fa36f34a97dd8013e48a7345bc4c4720be9a
|
||||||
ZLPhotoBrowser: 0563c2bfc7b247b65d023d646012f46cba94101b
|
ZLPhotoBrowser: 0563c2bfc7b247b65d023d646012f46cba94101b
|
||||||
|
|
||||||
PODFILE CHECKSUM: a50398c9fdc8f5753f43e8d3315d35e180ab0c05
|
PODFILE CHECKSUM: 9a2e6768eed0351abcabcf885507b3914d82edfd
|
||||||
|
|
||||||
COCOAPODS: 1.11.3
|
COCOAPODS: 1.11.3
|
||||||
|
|||||||
51
Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.h
generated
Executable file
51
Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.h
generated
Executable file
@@ -0,0 +1,51 @@
|
|||||||
|
//
|
||||||
|
// BRAddressModel.h
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2017/8/11.
|
||||||
|
// Copyright © 2017 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
/// 省
|
||||||
|
@interface BRProvinceModel : NSObject
|
||||||
|
/** 省对应的code或id */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *code;
|
||||||
|
/** 省的名称 */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *name;
|
||||||
|
/** 城市数组 */
|
||||||
|
@property (nullable, nonatomic, copy) NSArray *citylist;
|
||||||
|
/** 记录省选择的索引位置 */
|
||||||
|
@property (nonatomic, assign) NSInteger index;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
/// 市
|
||||||
|
@interface BRCityModel : NSObject
|
||||||
|
/** 市对应的code或id */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *code;
|
||||||
|
/** 市的名称 */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *name;
|
||||||
|
/** 地区数组 */
|
||||||
|
@property (nullable, nonatomic, copy) NSArray *arealist;
|
||||||
|
/** 记录市选择的索引位置 */
|
||||||
|
@property (nonatomic, assign) NSInteger index;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
/// 区
|
||||||
|
@interface BRAreaModel : NSObject
|
||||||
|
/** 区对应的code或id */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *code;
|
||||||
|
/** 区的名称 */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *name;
|
||||||
|
/** 记录区选择的索引位置 */
|
||||||
|
@property (nonatomic, assign) NSInteger index;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
24
Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.m
generated
Executable file
24
Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.m
generated
Executable file
@@ -0,0 +1,24 @@
|
|||||||
|
//
|
||||||
|
// BRAddressModel.m
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2017/8/11.
|
||||||
|
// Copyright © 2017 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "BRAddressModel.h"
|
||||||
|
|
||||||
|
@implementation BRProvinceModel
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation BRCityModel
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation BRAreaModel
|
||||||
|
|
||||||
|
@end
|
||||||
13634
Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.bundle/BRCity.json
generated
Executable file
13634
Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.bundle/BRCity.json
generated
Executable file
File diff suppressed because it is too large
Load Diff
127
Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.h
generated
Executable file
127
Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.h
generated
Executable file
@@ -0,0 +1,127 @@
|
|||||||
|
//
|
||||||
|
// BRAddressPickerView.h
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2017/8/11.
|
||||||
|
// Copyright © 2017 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "BRBaseView.h"
|
||||||
|
#import "BRAddressModel.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
/// 地址选择器类型
|
||||||
|
typedef NS_ENUM(NSInteger, BRAddressPickerMode) {
|
||||||
|
/** 显示【省市区】(默认) */
|
||||||
|
BRAddressPickerModeArea,
|
||||||
|
/** 显示【省市】 */
|
||||||
|
BRAddressPickerModeCity,
|
||||||
|
/** 显示【省】 */
|
||||||
|
BRAddressPickerModeProvince
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef void(^BRAddressResultBlock)(BRProvinceModel * _Nullable province, BRCityModel * _Nullable city, BRAreaModel * _Nullable area);
|
||||||
|
|
||||||
|
@interface BRAddressPickerView : BRBaseView
|
||||||
|
|
||||||
|
/**
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
///
|
||||||
|
/// 【用法一】
|
||||||
|
/// 特点:灵活,扩展性强(推荐使用!)
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
/** 地址选择器显示类型 */
|
||||||
|
@property (nonatomic, assign) BRAddressPickerMode pickerMode;
|
||||||
|
|
||||||
|
/** 默认选中的位置(1.传索引数组,如:@[@10, @0, @4]) */
|
||||||
|
@property (nullable, nonatomic, copy) NSArray <NSNumber *> *selectIndexs;
|
||||||
|
/** 默认选中的位置(2.传值数组,如:@[@"浙江省", @"杭州市", @"西湖区"]) */
|
||||||
|
@property (nullable, nonatomic, copy) NSArray <NSString *> *selectValues;
|
||||||
|
|
||||||
|
/** 选择结果的回调 */
|
||||||
|
@property (nullable, nonatomic, copy) BRAddressResultBlock resultBlock;
|
||||||
|
|
||||||
|
/** 滚动选择时触发的回调 */
|
||||||
|
@property (nullable, nonatomic, copy) BRAddressResultBlock changeBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地区数据源(不传或为nil,默认就获取本地 BRCity.json 文件的数据)
|
||||||
|
* 1.可以传 JSON数组,要注意 层级结构 和 key 要与 BRCity.json 保持一致
|
||||||
|
* 2.可以传 模型数组(NSArray <BRProvinceModel *> * 类型),自己解析数据源 只需要注意层级结构就行
|
||||||
|
*/
|
||||||
|
@property (nullable, nonatomic, copy) NSArray *dataSourceArr;
|
||||||
|
|
||||||
|
/// 初始化地址选择器
|
||||||
|
/// @param pickerMode 地址选择器显示类型
|
||||||
|
- (instancetype)initWithPickerMode:(BRAddressPickerMode)pickerMode;
|
||||||
|
|
||||||
|
/// 弹出选择器视图
|
||||||
|
- (void)show;
|
||||||
|
|
||||||
|
/// 关闭选择器视图
|
||||||
|
- (void)dismiss;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//================================================= 华丽的分割线 =================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
///
|
||||||
|
/// 【用法二】:快捷使用,直接选择下面其中的一个方法进行使用
|
||||||
|
/// 特点:快捷,方便
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1.显示地址选择器
|
||||||
|
*
|
||||||
|
* @param selectIndexs 默认选中的值(传索引数组,如:@[@10, @0, @4])
|
||||||
|
* @param resultBlock 选择后的回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
+ (void)showAddressPickerWithSelectIndexs:(nullable NSArray <NSNumber *> *)selectIndexs
|
||||||
|
resultBlock:(nullable BRAddressResultBlock)resultBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.显示地址选择器
|
||||||
|
*
|
||||||
|
* @param mode 地址选择器显示类型
|
||||||
|
* @param selectIndexs 默认选中的值(传索引数组,如:@[@10, @0, @4])
|
||||||
|
* @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO
|
||||||
|
* @param resultBlock 选择后的回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
+ (void)showAddressPickerWithMode:(BRAddressPickerMode)mode
|
||||||
|
selectIndexs:(nullable NSArray <NSNumber *> *)selectIndexs
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(nullable BRAddressResultBlock)resultBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 3.显示地址选择器
|
||||||
|
*
|
||||||
|
* @param mode 地址选择器显示类型
|
||||||
|
* @param dataSource 地区数据源
|
||||||
|
* @param selectIndexs 默认选中的值(传索引数组,如:@[@10, @0, @4])
|
||||||
|
* @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO
|
||||||
|
* @param resultBlock 选择后的回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
+ (void)showAddressPickerWithMode:(BRAddressPickerMode)mode
|
||||||
|
dataSource:(nullable NSArray *)dataSource
|
||||||
|
selectIndexs:(nullable NSArray <NSNumber *> *)selectIndexs
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(nullable BRAddressResultBlock)resultBlock;
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
562
Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.m
generated
Executable file
562
Pods/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.m
generated
Executable file
@@ -0,0 +1,562 @@
|
|||||||
|
//
|
||||||
|
// BRAddressPickerView.m
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2017/8/11.
|
||||||
|
// Copyright © 2017 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "BRAddressPickerView.h"
|
||||||
|
#import "NSBundle+BRPickerView.h"
|
||||||
|
|
||||||
|
@interface BRAddressPickerView ()<UIPickerViewDataSource, UIPickerViewDelegate>
|
||||||
|
// 地址选择器
|
||||||
|
@property (nonatomic, strong) UIPickerView *pickerView;
|
||||||
|
// 省模型数组
|
||||||
|
@property(nonatomic, copy) NSArray *provinceModelArr;
|
||||||
|
// 市模型数组
|
||||||
|
@property(nonatomic, copy) NSArray *cityModelArr;
|
||||||
|
// 区模型数组
|
||||||
|
@property(nonatomic, copy) NSArray *areaModelArr;
|
||||||
|
// 选中的省
|
||||||
|
@property(nonatomic, strong) BRProvinceModel *selectProvinceModel;
|
||||||
|
// 选中的市
|
||||||
|
@property(nonatomic, strong) BRCityModel *selectCityModel;
|
||||||
|
// 选中的区
|
||||||
|
@property(nonatomic, strong) BRAreaModel *selectAreaModel;
|
||||||
|
// 记录省选中的位置
|
||||||
|
@property(nonatomic, assign) NSInteger provinceIndex;
|
||||||
|
// 记录市选中的位置
|
||||||
|
@property(nonatomic, assign) NSInteger cityIndex;
|
||||||
|
// 记录区选中的位置
|
||||||
|
@property(nonatomic, assign) NSInteger areaIndex;
|
||||||
|
|
||||||
|
@property (nonatomic, copy) NSArray <NSString *>* mSelectValues;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation BRAddressPickerView
|
||||||
|
|
||||||
|
#pragma mark - 1.显示地址选择器
|
||||||
|
+ (void)showAddressPickerWithSelectIndexs:(NSArray <NSNumber *>*)selectIndexs
|
||||||
|
resultBlock:(BRAddressResultBlock)resultBlock {
|
||||||
|
[self showAddressPickerWithMode:BRAddressPickerModeArea dataSource:nil selectIndexs:selectIndexs isAutoSelect:NO resultBlock:resultBlock];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 2.显示地址选择器
|
||||||
|
+ (void)showAddressPickerWithMode:(BRAddressPickerMode)mode
|
||||||
|
selectIndexs:(NSArray <NSNumber *>*)selectIndexs
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(BRAddressResultBlock)resultBlock {
|
||||||
|
[self showAddressPickerWithMode:mode dataSource:nil selectIndexs:selectIndexs isAutoSelect:isAutoSelect resultBlock:resultBlock];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#pragma mark - 3.显示地址选择器
|
||||||
|
+ (void)showAddressPickerWithMode:(BRAddressPickerMode)mode
|
||||||
|
dataSource:(NSArray *)dataSource
|
||||||
|
selectIndexs:(NSArray <NSNumber *>*)selectIndexs
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(BRAddressResultBlock)resultBlock {
|
||||||
|
// 创建地址选择器
|
||||||
|
BRAddressPickerView *addressPickerView = [[BRAddressPickerView alloc] initWithPickerMode:mode];
|
||||||
|
addressPickerView.dataSourceArr = dataSource;
|
||||||
|
addressPickerView.selectIndexs = selectIndexs;
|
||||||
|
addressPickerView.isAutoSelect = isAutoSelect;
|
||||||
|
addressPickerView.resultBlock = resultBlock;
|
||||||
|
// 显示
|
||||||
|
[addressPickerView show];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 初始化地址选择器
|
||||||
|
- (instancetype)initWithPickerMode:(BRAddressPickerMode)pickerMode {
|
||||||
|
if (self = [super init]) {
|
||||||
|
self.pickerMode = pickerMode;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 处理选择器数据
|
||||||
|
- (void)handlerPickerData {
|
||||||
|
if (self.dataSourceArr && self.dataSourceArr.count > 0) {
|
||||||
|
id item = [self.dataSourceArr firstObject];
|
||||||
|
// 如果传的值是解析好的模型数组
|
||||||
|
if ([item isKindOfClass:[BRProvinceModel class]]) {
|
||||||
|
self.provinceModelArr = self.dataSourceArr;
|
||||||
|
} else {
|
||||||
|
self.provinceModelArr = [self getProvinceModelArr:self.dataSourceArr];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 如果外部没有传入地区数据源,就使用本地的数据源
|
||||||
|
NSArray *dataSource = [self br_addressJsonArray];
|
||||||
|
|
||||||
|
if (!dataSource || dataSource.count == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
self.dataSourceArr = dataSource;
|
||||||
|
self.provinceModelArr = [self getProvinceModelArr:self.dataSourceArr];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置默认值
|
||||||
|
[self handlerDefaultSelectValue];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取城市JSON数据
|
||||||
|
- (NSArray *)br_addressJsonArray {
|
||||||
|
static NSArray *cityArray = nil;
|
||||||
|
if (!cityArray) {
|
||||||
|
// 获取 BRAddressPickerView.bundle
|
||||||
|
NSBundle *containnerBundle = [NSBundle bundleForClass:[BRAddressPickerView class]];
|
||||||
|
NSString *bundlePath = [containnerBundle pathForResource:@"BRAddressPickerView" ofType:@"bundle"];
|
||||||
|
NSBundle *addressPickerBundle = [NSBundle bundleWithPath:bundlePath];
|
||||||
|
|
||||||
|
// 获取bundle中的JSON文件
|
||||||
|
NSString *filePath = [addressPickerBundle pathForResource:@"BRCity" ofType:@"json"];
|
||||||
|
NSData *data = [NSData dataWithContentsOfFile:filePath];
|
||||||
|
cityArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
|
||||||
|
}
|
||||||
|
return cityArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取模型数组
|
||||||
|
- (NSArray <BRProvinceModel *>*)getProvinceModelArr:(NSArray *)dataSourceArr {
|
||||||
|
NSMutableArray *tempArr1 = [NSMutableArray array];
|
||||||
|
for (NSDictionary *proviceDic in dataSourceArr) {
|
||||||
|
BRProvinceModel *proviceModel = [[BRProvinceModel alloc]init];
|
||||||
|
proviceModel.code = [proviceDic objectForKey:@"code"];
|
||||||
|
proviceModel.name = [proviceDic objectForKey:@"name"];
|
||||||
|
proviceModel.index = [dataSourceArr indexOfObject:proviceDic];
|
||||||
|
NSArray *cityList = [proviceDic.allKeys containsObject:@"cityList"] ? [proviceDic objectForKey:@"cityList"] : [proviceDic objectForKey:@"citylist"];
|
||||||
|
NSMutableArray *tempArr2 = [NSMutableArray array];
|
||||||
|
for (NSDictionary *cityDic in cityList) {
|
||||||
|
BRCityModel *cityModel = [[BRCityModel alloc]init];
|
||||||
|
cityModel.code = [cityDic objectForKey:@"code"];
|
||||||
|
cityModel.name = [cityDic objectForKey:@"name"];
|
||||||
|
cityModel.index = [cityList indexOfObject:cityDic];
|
||||||
|
NSArray *areaList = [cityDic.allKeys containsObject:@"areaList"] ? [cityDic objectForKey:@"areaList"] : [cityDic objectForKey:@"arealist"];
|
||||||
|
NSMutableArray *tempArr3 = [NSMutableArray array];
|
||||||
|
for (NSDictionary *areaDic in areaList) {
|
||||||
|
BRAreaModel *areaModel = [[BRAreaModel alloc]init];
|
||||||
|
areaModel.code = [areaDic objectForKey:@"code"];
|
||||||
|
areaModel.name = [areaDic objectForKey:@"name"];
|
||||||
|
areaModel.index = [areaList indexOfObject:areaDic];
|
||||||
|
[tempArr3 addObject:areaModel];
|
||||||
|
}
|
||||||
|
cityModel.arealist = [tempArr3 copy];
|
||||||
|
[tempArr2 addObject:cityModel];
|
||||||
|
}
|
||||||
|
proviceModel.citylist = [tempArr2 copy];
|
||||||
|
[tempArr1 addObject:proviceModel];
|
||||||
|
}
|
||||||
|
return [tempArr1 copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 设置默认选择的值
|
||||||
|
- (void)handlerDefaultSelectValue {
|
||||||
|
__block NSString *selectProvinceName = nil;
|
||||||
|
__block NSString *selectCityName = nil;
|
||||||
|
__block NSString *selectAreaName = nil;
|
||||||
|
|
||||||
|
if (self.mSelectValues.count > 0) {
|
||||||
|
selectProvinceName = self.mSelectValues.count > 0 ? self.mSelectValues[0] : nil;
|
||||||
|
selectCityName = self.mSelectValues.count > 1 ? self.mSelectValues[1] : nil;
|
||||||
|
selectAreaName = self.mSelectValues.count > 2 ? self.mSelectValues[2] : nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
__weak typeof(self) weakSelf = self;
|
||||||
|
|
||||||
|
if (self.pickerMode == BRAddressPickerModeProvince || self.pickerMode == BRAddressPickerModeCity || self.pickerMode == BRAddressPickerModeArea) {
|
||||||
|
if (self.selectIndexs.count > 0) {
|
||||||
|
NSInteger provinceIndex = [self.selectIndexs[0] integerValue];
|
||||||
|
self.provinceIndex = (provinceIndex > 0 && provinceIndex < self.provinceModelArr.count) ? provinceIndex : 0;
|
||||||
|
self.selectProvinceModel = self.provinceModelArr.count > self.provinceIndex ? self.provinceModelArr[self.provinceIndex] : nil;
|
||||||
|
} else {
|
||||||
|
self.provinceIndex = 0;
|
||||||
|
self.selectProvinceModel = self.provinceModelArr.count > 0 ? self.provinceModelArr[0] : nil;
|
||||||
|
[self.provinceModelArr enumerateObjectsUsingBlock:^(BRProvinceModel * _Nonnull model, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||||
|
if (selectProvinceName && [model.name isEqualToString:selectProvinceName]) {
|
||||||
|
weakSelf.provinceIndex = idx;
|
||||||
|
weakSelf.selectProvinceModel = model;
|
||||||
|
*stop = YES;
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.pickerMode == BRAddressPickerModeCity || self.pickerMode == BRAddressPickerModeArea) {
|
||||||
|
self.cityModelArr = [self getCityModelArray:self.provinceIndex];
|
||||||
|
if (self.selectIndexs.count > 0) {
|
||||||
|
NSInteger cityIndex = self.selectIndexs.count > 1 ? [self.selectIndexs[1] integerValue] : 0;
|
||||||
|
self.cityIndex = (cityIndex > 0 && cityIndex < self.cityModelArr.count) ? cityIndex : 0;
|
||||||
|
self.selectCityModel = self.cityModelArr.count > self.cityIndex ? self.cityModelArr[self.cityIndex] : nil;
|
||||||
|
} else {
|
||||||
|
self.cityIndex = 0;
|
||||||
|
self.selectCityModel = self.cityModelArr.count > 0 ? self.cityModelArr[0] : nil;
|
||||||
|
[self.cityModelArr enumerateObjectsUsingBlock:^(BRCityModel * _Nonnull model, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||||
|
if (selectCityName && [model.name isEqualToString:selectCityName]) {
|
||||||
|
weakSelf.cityIndex = idx;
|
||||||
|
weakSelf.selectCityModel = model;
|
||||||
|
*stop = YES;
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.pickerMode == BRAddressPickerModeArea) {
|
||||||
|
self.areaModelArr = [self getAreaModelArray:self.provinceIndex cityIndex:self.cityIndex];
|
||||||
|
if (self.selectIndexs.count > 0) {
|
||||||
|
NSInteger areaIndex = self.selectIndexs.count > 2 ? [self.selectIndexs[2] integerValue] : 0;
|
||||||
|
self.areaIndex = (areaIndex > 0 && areaIndex < self.areaModelArr.count) ? areaIndex : 0;
|
||||||
|
self.selectAreaModel = self.areaModelArr.count > self.areaIndex ? self.areaModelArr[self.areaIndex] : nil;
|
||||||
|
} else {
|
||||||
|
self.areaIndex = 0;
|
||||||
|
self.selectAreaModel = self.areaModelArr.count > 0 ? self.areaModelArr[0] : nil;
|
||||||
|
[self.areaModelArr enumerateObjectsUsingBlock:^(BRAreaModel * _Nonnull model, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||||
|
if (selectAreaName && [model.name isEqualToString:selectAreaName]) {
|
||||||
|
weakSelf.areaIndex = idx;
|
||||||
|
weakSelf.selectAreaModel = model;
|
||||||
|
*stop = YES;
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据 省索引 获取 城市模型数组
|
||||||
|
- (NSArray *)getCityModelArray:(NSInteger)provinceIndex {
|
||||||
|
BRProvinceModel *provinceModel = self.provinceModelArr[provinceIndex];
|
||||||
|
// 返回城市模型数组
|
||||||
|
return provinceModel.citylist;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据 省索引和城市索引 获取 区域模型数组
|
||||||
|
- (NSArray *)getAreaModelArray:(NSInteger)provinceIndex cityIndex:(NSInteger)cityIndex {
|
||||||
|
BRProvinceModel *provinceModel = self.provinceModelArr[provinceIndex];
|
||||||
|
if (provinceModel.citylist && provinceModel.citylist.count > 0) {
|
||||||
|
BRCityModel *cityModel = provinceModel.citylist[cityIndex];
|
||||||
|
// 返回地区模型数组
|
||||||
|
return cityModel.arealist;
|
||||||
|
} else {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 地址选择器
|
||||||
|
- (UIPickerView *)pickerView {
|
||||||
|
if (!_pickerView) {
|
||||||
|
CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
|
||||||
|
_pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight)];
|
||||||
|
_pickerView.backgroundColor = self.pickerStyle.pickerColor;
|
||||||
|
_pickerView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
|
||||||
|
_pickerView.dataSource = self;
|
||||||
|
_pickerView.delegate = self;
|
||||||
|
}
|
||||||
|
return _pickerView;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - UIPickerViewDataSource
|
||||||
|
// 1.设置 pickerView 的列数
|
||||||
|
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
|
||||||
|
switch (self.pickerMode) {
|
||||||
|
case BRAddressPickerModeProvince:
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
case BRAddressPickerModeCity:
|
||||||
|
return 2;
|
||||||
|
break;
|
||||||
|
case BRAddressPickerModeArea:
|
||||||
|
return 3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.设置 pickerView 每列的行数
|
||||||
|
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
|
||||||
|
if (component == 0) {
|
||||||
|
// 返回省个数
|
||||||
|
return self.provinceModelArr.count;
|
||||||
|
}
|
||||||
|
if (component == 1) {
|
||||||
|
// 返回市个数
|
||||||
|
return self.cityModelArr.count;
|
||||||
|
}
|
||||||
|
if (component == 2) {
|
||||||
|
// 返回区个数
|
||||||
|
return self.areaModelArr.count;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - UIPickerViewDelegate
|
||||||
|
// 3.设置 pickerView 的显示内容
|
||||||
|
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view {
|
||||||
|
// 1.自定义 row 的内容视图
|
||||||
|
UILabel *label = (UILabel *)view;
|
||||||
|
if (!label) {
|
||||||
|
label = [[UILabel alloc]init];
|
||||||
|
label.backgroundColor = [UIColor clearColor];
|
||||||
|
label.textAlignment = NSTextAlignmentCenter;
|
||||||
|
label.font = self.pickerStyle.pickerTextFont;
|
||||||
|
label.textColor = self.pickerStyle.pickerTextColor;
|
||||||
|
// 字体自适应属性
|
||||||
|
label.adjustsFontSizeToFitWidth = YES;
|
||||||
|
// 自适应最小字体缩放比例
|
||||||
|
label.minimumScaleFactor = 0.5f;
|
||||||
|
}
|
||||||
|
if (component == 0) {
|
||||||
|
BRProvinceModel *model = self.provinceModelArr[row];
|
||||||
|
label.text = model.name;
|
||||||
|
} else if (component == 1) {
|
||||||
|
BRCityModel *model = self.cityModelArr[row];
|
||||||
|
label.text = model.name;
|
||||||
|
} else if (component == 2) {
|
||||||
|
BRAreaModel *model = self.areaModelArr[row];
|
||||||
|
label.text = model.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.设置选择器中间选中行的样式
|
||||||
|
[self.pickerStyle setupPickerSelectRowStyle:pickerView titleForRow:row forComponent:component];
|
||||||
|
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4.滚动 pickerView 执行的回调方法
|
||||||
|
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
|
||||||
|
if (component == 0) { // 选择省
|
||||||
|
// 保存选择的省份的索引
|
||||||
|
self.provinceIndex = row;
|
||||||
|
switch (self.pickerMode) {
|
||||||
|
case BRAddressPickerModeProvince:
|
||||||
|
{
|
||||||
|
self.selectProvinceModel = self.provinceModelArr.count > self.provinceIndex ? self.provinceModelArr[self.provinceIndex] : nil;
|
||||||
|
self.selectCityModel = nil;
|
||||||
|
self.selectAreaModel = nil;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BRAddressPickerModeCity:
|
||||||
|
{
|
||||||
|
self.cityModelArr = [self getCityModelArray:self.provinceIndex];
|
||||||
|
[self.pickerView reloadComponent:1];
|
||||||
|
[self.pickerView selectRow:0 inComponent:1 animated:YES];
|
||||||
|
self.selectProvinceModel = self.provinceModelArr.count > self.provinceIndex ? self.provinceModelArr[self.provinceIndex] : nil;
|
||||||
|
self.selectCityModel = self.cityModelArr.count > 0 ? self.cityModelArr[0] : nil;
|
||||||
|
self.selectAreaModel = nil;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BRAddressPickerModeArea:
|
||||||
|
{
|
||||||
|
self.cityModelArr = [self getCityModelArray:self.provinceIndex];
|
||||||
|
self.areaModelArr = [self getAreaModelArray:self.provinceIndex cityIndex:0];
|
||||||
|
[self.pickerView reloadComponent:1];
|
||||||
|
[self.pickerView selectRow:0 inComponent:1 animated:YES];
|
||||||
|
[self.pickerView reloadComponent:2];
|
||||||
|
[self.pickerView selectRow:0 inComponent:2 animated:YES];
|
||||||
|
self.selectProvinceModel = self.provinceModelArr.count > self.provinceIndex ? self.provinceModelArr[self.provinceIndex] : nil;
|
||||||
|
self.selectCityModel = self.cityModelArr.count > 0 ? self.cityModelArr[0] : nil;
|
||||||
|
self.selectAreaModel = self.areaModelArr.count > 0 ? self.areaModelArr[0] : nil;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (component == 1) { // 选择市
|
||||||
|
// 保存选择的城市的索引
|
||||||
|
self.cityIndex = row;
|
||||||
|
switch (self.pickerMode) {
|
||||||
|
case BRAddressPickerModeCity:
|
||||||
|
{
|
||||||
|
self.selectCityModel = self.cityModelArr.count > self.cityIndex ? self.cityModelArr[self.cityIndex] : nil;
|
||||||
|
self.selectAreaModel = nil;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BRAddressPickerModeArea:
|
||||||
|
{
|
||||||
|
self.areaModelArr = [self getAreaModelArray:self.provinceIndex cityIndex:self.cityIndex];
|
||||||
|
[self.pickerView reloadComponent:2];
|
||||||
|
[self.pickerView selectRow:0 inComponent:2 animated:YES];
|
||||||
|
self.selectCityModel = self.cityModelArr.count > self.cityIndex ? self.cityModelArr[self.cityIndex] : nil;
|
||||||
|
self.selectAreaModel = self.areaModelArr.count > 0 ? self.areaModelArr[0] : nil;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (component == 2) { // 选择区
|
||||||
|
// 保存选择的地区的索引
|
||||||
|
self.areaIndex = row;
|
||||||
|
if (self.pickerMode == BRAddressPickerModeArea) {
|
||||||
|
self.selectAreaModel = self.areaModelArr.count > self.areaIndex ? self.areaModelArr[self.areaIndex] : nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 滚动选择时执行 changeBlock
|
||||||
|
if (self.changeBlock) {
|
||||||
|
self.changeBlock(self.selectProvinceModel, self.selectCityModel, self.selectAreaModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置自动选择时,滚动选择时就执行 resultBlock
|
||||||
|
if (self.isAutoSelect) {
|
||||||
|
if (self.resultBlock) {
|
||||||
|
self.resultBlock(self.selectProvinceModel, self.selectCityModel, self.selectAreaModel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置行高
|
||||||
|
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
|
||||||
|
return self.pickerStyle.rowHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 重写父类方法
|
||||||
|
- (void)reloadData {
|
||||||
|
// 1.处理数据源
|
||||||
|
[self handlerPickerData];
|
||||||
|
// 2.刷新选择器
|
||||||
|
[self.pickerView reloadAllComponents];
|
||||||
|
// 3.滚动到选择的地区
|
||||||
|
if (self.pickerMode == BRAddressPickerModeProvince) {
|
||||||
|
[self.pickerView selectRow:self.provinceIndex inComponent:0 animated:YES];
|
||||||
|
} else if (self.pickerMode == BRAddressPickerModeCity) {
|
||||||
|
[self.pickerView selectRow:self.provinceIndex inComponent:0 animated:YES];
|
||||||
|
[self.pickerView selectRow:self.cityIndex inComponent:1 animated:YES];
|
||||||
|
} else if (self.pickerMode == BRAddressPickerModeArea) {
|
||||||
|
[self.pickerView selectRow:self.provinceIndex inComponent:0 animated:YES];
|
||||||
|
[self.pickerView selectRow:self.cityIndex inComponent:1 animated:YES];
|
||||||
|
[self.pickerView selectRow:self.areaIndex inComponent:2 animated:YES];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)addPickerToView:(UIView *)view {
|
||||||
|
// 1.添加地址选择器
|
||||||
|
if (view) {
|
||||||
|
// 立即刷新容器视图 view 的布局(防止 view 使用自动布局时,选择器视图无法正常显示)
|
||||||
|
[view setNeedsLayout];
|
||||||
|
[view layoutIfNeeded];
|
||||||
|
|
||||||
|
self.frame = view.bounds;
|
||||||
|
CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
|
||||||
|
CGFloat pickerFooterViewHeight = self.pickerFooterView ? self.pickerFooterView.bounds.size.height : 0;
|
||||||
|
self.pickerView.frame = CGRectMake(0, pickerHeaderViewHeight, view.bounds.size.width, view.bounds.size.height - pickerHeaderViewHeight - pickerFooterViewHeight);
|
||||||
|
[self addSubview:self.pickerView];
|
||||||
|
} else {
|
||||||
|
// iOS16:重新设置 pickerView 高度(解决懒加载设置frame不生效问题)
|
||||||
|
CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
|
||||||
|
self.pickerView.frame = CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight);
|
||||||
|
|
||||||
|
[self.alertView addSubview:self.pickerView];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ③添加中间选择行的两条分割线
|
||||||
|
if (self.pickerStyle.clearPickerNewStyle) {
|
||||||
|
[self.pickerStyle addSeparatorLineView:self.pickerView];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.绑定数据
|
||||||
|
[self reloadData];
|
||||||
|
|
||||||
|
__weak typeof(self) weakSelf = self;
|
||||||
|
self.doneBlock = ^{
|
||||||
|
// 点击确定按钮后,执行block回调
|
||||||
|
if (weakSelf.resultBlock) {
|
||||||
|
weakSelf.resultBlock(weakSelf.selectProvinceModel, weakSelf.selectCityModel, weakSelf.selectAreaModel);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
[super addPickerToView:view];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 重写父类方法
|
||||||
|
- (void)addSubViewToPicker:(UIView *)customView {
|
||||||
|
[self.pickerView addSubview:customView];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 弹出选择器视图
|
||||||
|
- (void)show {
|
||||||
|
[self addPickerToView:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 关闭选择器视图
|
||||||
|
- (void)dismiss {
|
||||||
|
[self removePickerFromView:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - setter方法
|
||||||
|
- (void)setSelectValues:(NSArray<NSString *> *)selectValues {
|
||||||
|
self.mSelectValues = selectValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - getter方法
|
||||||
|
- (NSArray *)provinceModelArr {
|
||||||
|
if (!_provinceModelArr) {
|
||||||
|
_provinceModelArr = [NSArray array];
|
||||||
|
}
|
||||||
|
return _provinceModelArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray *)cityModelArr {
|
||||||
|
if (!_cityModelArr) {
|
||||||
|
_cityModelArr = [NSArray array];
|
||||||
|
}
|
||||||
|
return _cityModelArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray *)areaModelArr {
|
||||||
|
if (!_areaModelArr) {
|
||||||
|
_areaModelArr = [NSArray array];
|
||||||
|
}
|
||||||
|
return _areaModelArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BRProvinceModel *)selectProvinceModel {
|
||||||
|
if (!_selectProvinceModel) {
|
||||||
|
_selectProvinceModel = [[BRProvinceModel alloc]init];
|
||||||
|
}
|
||||||
|
return _selectProvinceModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BRCityModel *)selectCityModel {
|
||||||
|
if (!_selectCityModel) {
|
||||||
|
_selectCityModel = [[BRCityModel alloc]init];
|
||||||
|
_selectCityModel.code = @"";
|
||||||
|
_selectCityModel.name = @"";
|
||||||
|
}
|
||||||
|
return _selectCityModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BRAreaModel *)selectAreaModel {
|
||||||
|
if (!_selectAreaModel) {
|
||||||
|
_selectAreaModel = [[BRAreaModel alloc]init];
|
||||||
|
_selectAreaModel.code = @"";
|
||||||
|
_selectAreaModel.name = @"";
|
||||||
|
}
|
||||||
|
return _selectAreaModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray *)dataSourceArr {
|
||||||
|
if (!_dataSourceArr) {
|
||||||
|
_dataSourceArr = [NSArray array];
|
||||||
|
}
|
||||||
|
return _dataSourceArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray<NSString *> *)mSelectValues {
|
||||||
|
if (!_mSelectValues) {
|
||||||
|
_mSelectValues = [NSArray array];
|
||||||
|
}
|
||||||
|
return _mSelectValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray<NSNumber *> *)selectIndexs {
|
||||||
|
if (!_selectIndexs) {
|
||||||
|
_selectIndexs = [NSArray array];
|
||||||
|
}
|
||||||
|
return _selectIndexs;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
17
Pods/BRPickerView/BRPickerView/BRPickerView.h
generated
Executable file
17
Pods/BRPickerView/BRPickerView/BRPickerView.h
generated
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// BRPickerView.h
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2017/8/11.
|
||||||
|
// Copyright © 2017 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#ifndef BRPickerView_h
|
||||||
|
#define BRPickerView_h
|
||||||
|
|
||||||
|
#import "BRDatePickerView.h"
|
||||||
|
#import "BRAddressPickerView.h"
|
||||||
|
#import "BRStringPickerView.h"
|
||||||
|
|
||||||
|
#endif /* BRPickerView_h */
|
||||||
76
Pods/BRPickerView/BRPickerView/Base/BRBaseView.h
generated
Normal file
76
Pods/BRPickerView/BRPickerView/Base/BRBaseView.h
generated
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
//
|
||||||
|
// BaseView.h
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2017/8/11.
|
||||||
|
// Copyright © 2017 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "BRPickerStyle.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
typedef void(^BRCancelBlock)(void);
|
||||||
|
typedef void(^BRDoneClickBlock)(void);
|
||||||
|
|
||||||
|
@interface BRBaseView : UIView
|
||||||
|
|
||||||
|
/** 选择器标题 */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *title;
|
||||||
|
|
||||||
|
/** 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO */
|
||||||
|
@property (nonatomic, assign) BOOL isAutoSelect;
|
||||||
|
|
||||||
|
/** 自定义UI样式(不传或为nil时,是默认样式) */
|
||||||
|
@property (nullable, nonatomic, strong) BRPickerStyle *pickerStyle;
|
||||||
|
|
||||||
|
/** 取消选择的回调 */
|
||||||
|
@property (nullable, nonatomic, copy) BRCancelBlock cancelBlock;
|
||||||
|
|
||||||
|
/** accessory view for above picker view. default is nil */
|
||||||
|
@property (nullable, nonatomic, strong) UIView *pickerHeaderView;
|
||||||
|
|
||||||
|
/** accessory view below picker view. default is nil */
|
||||||
|
@property (nullable, nonatomic, strong) UIView *pickerFooterView;
|
||||||
|
|
||||||
|
/// 确定按钮点击事件的回调
|
||||||
|
/// 应用场景:如果是自定义确定按钮,需要在该按钮点击事件方法里,执行一下 doneBlock 回调。目的是触发组件内部执行 resultBlock 回调,回调选择的值
|
||||||
|
@property (nullable, nonatomic, copy) BRDoneClickBlock doneBlock;
|
||||||
|
|
||||||
|
/** 弹框视图(使用场景:可以在 alertView 上添加选择器的自定义背景视图) */
|
||||||
|
@property (nullable, nonatomic, strong) UIView *alertView;
|
||||||
|
|
||||||
|
/** 组件的父视图:可以传 自己获取的 keyWindow,或页面的 view */
|
||||||
|
@property (nullable, nonatomic, strong) UIView *keyView;
|
||||||
|
|
||||||
|
|
||||||
|
/// 刷新选择器数据
|
||||||
|
/// 应用场景:动态更新数据源、动态更新选择的值、选择器类型切换等
|
||||||
|
- (void)reloadData;
|
||||||
|
|
||||||
|
/// 扩展一:添加选择器到指定容器视图上
|
||||||
|
/// 应用场景:可将中间的滚轮选择器 pickerView 视图(不包含蒙层及标题栏)添加到任何自定义视图上(会自动填满容器视图),也方便自定义更多的弹框样式
|
||||||
|
/// 补充说明:如果是自定义确定按钮,需要回调默认选择的值:只需在自定义确定按钮的点击事件方法里执行一下 doneBlock 回调(目的是去触发组件内部执行 resultBlock 回调,进而回调默认选择的值)
|
||||||
|
/// @param view 容器视图
|
||||||
|
- (void)addPickerToView:(nullable UIView *)view NS_REQUIRES_SUPER;
|
||||||
|
|
||||||
|
/// 从指定容器视图上移除选择器
|
||||||
|
/// @param view 容器视图
|
||||||
|
- (void)removePickerFromView:(nullable UIView *)view;
|
||||||
|
|
||||||
|
/// 扩展二:添加自定义视图到选择器(pickerView)上
|
||||||
|
/// 应用场景:可以添加一些固定的标题、单位等到选择器中间
|
||||||
|
/// @param customView 自定义视图
|
||||||
|
- (void)addSubViewToPicker:(UIView *)customView;
|
||||||
|
|
||||||
|
/// 扩展三:添加自定义视图到标题栏(titleBarView)上
|
||||||
|
/// 应用场景:可以添加一些子控件到标题栏
|
||||||
|
/// @param customView 自定义视图
|
||||||
|
- (void)addSubViewToTitleBar:(UIView *)customView;
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
398
Pods/BRPickerView/BRPickerView/Base/BRBaseView.m
generated
Normal file
398
Pods/BRPickerView/BRPickerView/Base/BRBaseView.m
generated
Normal file
@@ -0,0 +1,398 @@
|
|||||||
|
//
|
||||||
|
// BaseView.m
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2017/8/11.
|
||||||
|
// Copyright © 2017 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "BRBaseView.h"
|
||||||
|
|
||||||
|
@interface BRBaseView ()
|
||||||
|
// 蒙层视图
|
||||||
|
@property (nonatomic, strong) UIView *maskView;
|
||||||
|
// 标题栏背景视图
|
||||||
|
@property (nonatomic, strong) UIView *titleBarView;
|
||||||
|
// 左边取消按钮
|
||||||
|
@property (nonatomic, strong) UIButton *cancelBtn;
|
||||||
|
// 右边确定按钮
|
||||||
|
@property (nonatomic, strong) UIButton *doneBtn;
|
||||||
|
// 中间标题
|
||||||
|
@property (nonatomic, strong) UILabel *titleLabel;
|
||||||
|
|
||||||
|
// 取消按钮离屏幕边缘的距离
|
||||||
|
@property (nonatomic, assign) CGFloat cancelBtnMargin;
|
||||||
|
// 确定按钮离屏幕边缘的距离
|
||||||
|
@property (nonatomic, assign) CGFloat doneBtnMargin;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation BRBaseView
|
||||||
|
|
||||||
|
- (void)initUI {
|
||||||
|
self.frame = self.keyView.bounds;
|
||||||
|
// 设置子视图的宽度随着父视图变化
|
||||||
|
self.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||||||
|
|
||||||
|
if (!self.pickerStyle.hiddenMaskView) {
|
||||||
|
[self addSubview:self.maskView];
|
||||||
|
}
|
||||||
|
|
||||||
|
[self addSubview:self.alertView];
|
||||||
|
|
||||||
|
// 是否隐藏标题栏
|
||||||
|
if (!self.pickerStyle.hiddenTitleBarView) {
|
||||||
|
[self.alertView addSubview:self.titleBarView];
|
||||||
|
[self.alertView sendSubviewToBack:self.titleBarView];
|
||||||
|
|
||||||
|
if (!self.pickerStyle.hiddenTitleLabel) {
|
||||||
|
[self.titleBarView addSubview:self.titleLabel];
|
||||||
|
}
|
||||||
|
if (!self.pickerStyle.hiddenCancelBtn) {
|
||||||
|
[self.titleBarView addSubview:self.cancelBtn];
|
||||||
|
// 获取边距
|
||||||
|
if (self.pickerStyle.cancelBtnFrame.origin.x < self.bounds.size.width / 2) {
|
||||||
|
self.cancelBtnMargin = self.pickerStyle.cancelBtnFrame.origin.x;
|
||||||
|
} else {
|
||||||
|
self.cancelBtnMargin = self.bounds.size.width - self.pickerStyle.cancelBtnFrame.origin.x - self.pickerStyle.cancelBtnFrame.size.width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!self.pickerStyle.hiddenDoneBtn) {
|
||||||
|
[self.titleBarView addSubview:self.doneBtn];
|
||||||
|
// 获取边距
|
||||||
|
if (self.pickerStyle.doneBtnFrame.origin.x < self.bounds.size.width / 2) {
|
||||||
|
self.doneBtnMargin = self.pickerStyle.doneBtnFrame.origin.x;
|
||||||
|
} else {
|
||||||
|
self.doneBtnMargin = self.bounds.size.width - self.pickerStyle.doneBtnFrame.origin.x - self.pickerStyle.doneBtnFrame.size.width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 适配横屏安全区域,更新子视图布局
|
||||||
|
- (void)layoutSubviews {
|
||||||
|
[super layoutSubviews];
|
||||||
|
if (_cancelBtn || _doneBtn) {
|
||||||
|
if (@available(iOS 11.0, *)) {
|
||||||
|
UIEdgeInsets safeInsets = self.safeAreaInsets;
|
||||||
|
if (_cancelBtn) {
|
||||||
|
CGRect cancelBtnFrame = self.pickerStyle.cancelBtnFrame;
|
||||||
|
if (cancelBtnFrame.origin.x < MIN(self.bounds.size.width / 2, self.bounds.size.height / 2)) {
|
||||||
|
cancelBtnFrame.origin.x += safeInsets.left;
|
||||||
|
} else {
|
||||||
|
cancelBtnFrame.origin.x = self.bounds.size.width - cancelBtnFrame.size.width - safeInsets.right - self.cancelBtnMargin;
|
||||||
|
}
|
||||||
|
self.cancelBtn.frame = cancelBtnFrame;
|
||||||
|
}
|
||||||
|
if (_doneBtn) {
|
||||||
|
CGRect doneBtnFrame = self.pickerStyle.doneBtnFrame;
|
||||||
|
if (doneBtnFrame.origin.x < MIN(self.bounds.size.width / 2, self.bounds.size.height / 2)) {
|
||||||
|
doneBtnFrame.origin.x += safeInsets.left;
|
||||||
|
} else {
|
||||||
|
doneBtnFrame.origin.x = self.bounds.size.width - doneBtnFrame.size.width - safeInsets.right - self.doneBtnMargin;
|
||||||
|
}
|
||||||
|
self.doneBtn.frame = doneBtnFrame;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_alertView && self.pickerStyle.topCornerRadius > 0) {
|
||||||
|
// 设置顶部圆角
|
||||||
|
[BRPickerStyle br_setView:_alertView roundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight withRadius:self.pickerStyle.topCornerRadius];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 蒙层视图
|
||||||
|
- (UIView *)maskView {
|
||||||
|
if (!_maskView) {
|
||||||
|
_maskView = [[UIView alloc]initWithFrame:self.keyView.bounds];
|
||||||
|
_maskView.backgroundColor = self.pickerStyle.maskColor;
|
||||||
|
// 设置子视图的大小随着父视图变化
|
||||||
|
_maskView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||||||
|
_maskView.userInteractionEnabled = YES;
|
||||||
|
UITapGestureRecognizer *myTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(didTapMaskView:)];
|
||||||
|
[_maskView addGestureRecognizer:myTap];
|
||||||
|
}
|
||||||
|
return _maskView;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 弹框视图
|
||||||
|
- (UIView *)alertView {
|
||||||
|
if (!_alertView) {
|
||||||
|
CGFloat accessoryViewHeight = 0;
|
||||||
|
if (self.pickerHeaderView) {
|
||||||
|
accessoryViewHeight += self.pickerHeaderView.bounds.size.height;
|
||||||
|
}
|
||||||
|
if (self.pickerFooterView) {
|
||||||
|
accessoryViewHeight += self.pickerFooterView.bounds.size.height;
|
||||||
|
}
|
||||||
|
CGFloat height = self.pickerStyle.titleBarHeight + self.pickerStyle.pickerHeight + self.pickerStyle.paddingBottom + accessoryViewHeight;
|
||||||
|
_alertView = [[UIView alloc]initWithFrame:CGRectMake(0, self.keyView.bounds.size.height - height, self.keyView.bounds.size.width, height)];
|
||||||
|
_alertView.backgroundColor = self.pickerStyle.alertViewColor ? self.pickerStyle.alertViewColor : self.pickerStyle.pickerColor;
|
||||||
|
if (!self.pickerStyle.topCornerRadius && !self.pickerStyle.hiddenShadowLine) {
|
||||||
|
// 设置弹框视图顶部边框线
|
||||||
|
UIView *shadowLineView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, _alertView.frame.size.width, self.pickerStyle.shadowLineHeight)];
|
||||||
|
shadowLineView.backgroundColor = self.pickerStyle.shadowLineColor;
|
||||||
|
shadowLineView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
|
||||||
|
[_alertView addSubview:shadowLineView];
|
||||||
|
}
|
||||||
|
_alertView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
|
||||||
|
}
|
||||||
|
return _alertView;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 标题栏视图
|
||||||
|
- (UIView *)titleBarView {
|
||||||
|
if (!_titleBarView) {
|
||||||
|
_titleBarView =[[UIView alloc]initWithFrame:CGRectMake(0, 0, self.keyView.bounds.size.width, self.pickerStyle.titleBarHeight)];
|
||||||
|
_titleBarView.backgroundColor = self.pickerStyle.titleBarColor;
|
||||||
|
_titleBarView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
|
||||||
|
if (!self.pickerStyle.hiddenTitleLine) {
|
||||||
|
// 设置标题栏底部分割线
|
||||||
|
UIView *titleLineView = [[UIView alloc]initWithFrame:CGRectMake(0, _titleBarView.frame.size.height - 0.5f, _titleBarView.frame.size.width, 0.5f)];
|
||||||
|
titleLineView.backgroundColor = self.pickerStyle.titleLineColor;
|
||||||
|
titleLineView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
|
||||||
|
[_titleBarView addSubview:titleLineView];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _titleBarView;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 取消按钮
|
||||||
|
- (UIButton *)cancelBtn {
|
||||||
|
if (!_cancelBtn) {
|
||||||
|
_cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
|
_cancelBtn.frame = self.pickerStyle.cancelBtnFrame;
|
||||||
|
_cancelBtn.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin;
|
||||||
|
_cancelBtn.backgroundColor = self.pickerStyle.cancelColor;;
|
||||||
|
_cancelBtn.titleLabel.font = self.pickerStyle.cancelTextFont;
|
||||||
|
[_cancelBtn setTitleColor:self.pickerStyle.cancelTextColor forState:UIControlStateNormal];
|
||||||
|
if (self.pickerStyle.cancelBtnImage) {
|
||||||
|
[_cancelBtn setImage:self.pickerStyle.cancelBtnImage forState:UIControlStateNormal];
|
||||||
|
}
|
||||||
|
if (self.pickerStyle.cancelBtnTitle) {
|
||||||
|
[_cancelBtn setTitle:self.pickerStyle.cancelBtnTitle forState:UIControlStateNormal];
|
||||||
|
}
|
||||||
|
[_cancelBtn addTarget:self action:@selector(clickCancelBtn) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
// 设置按钮圆角或边框
|
||||||
|
if (self.pickerStyle.cancelBorderStyle == BRBorderStyleSolid) {
|
||||||
|
_cancelBtn.layer.cornerRadius = self.pickerStyle.cancelCornerRadius > 0 ? self.pickerStyle.cancelCornerRadius : 6.0f;
|
||||||
|
_cancelBtn.layer.borderColor = self.pickerStyle.cancelTextColor.CGColor;
|
||||||
|
_cancelBtn.layer.borderWidth = self.pickerStyle.cancelBorderWidth > 0 ? self.pickerStyle.cancelBorderWidth : 1.0f;
|
||||||
|
_cancelBtn.layer.masksToBounds = YES;
|
||||||
|
} else if (self.pickerStyle.cancelBorderStyle == BRBorderStyleFill) {
|
||||||
|
_cancelBtn.layer.cornerRadius = self.pickerStyle.cancelCornerRadius > 0 ? self.pickerStyle.cancelCornerRadius : 6.0f;
|
||||||
|
_cancelBtn.layer.masksToBounds = YES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _cancelBtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 确定按钮
|
||||||
|
- (UIButton *)doneBtn {
|
||||||
|
if (!_doneBtn) {
|
||||||
|
_doneBtn = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
|
_doneBtn.frame = self.pickerStyle.doneBtnFrame;
|
||||||
|
_doneBtn.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin;
|
||||||
|
_doneBtn.backgroundColor = self.pickerStyle.doneColor;
|
||||||
|
if (self.pickerStyle.doneBtnImage) {
|
||||||
|
[_doneBtn setImage:self.pickerStyle.doneBtnImage forState:UIControlStateNormal];
|
||||||
|
}
|
||||||
|
if (self.pickerStyle.doneBtnTitle) {
|
||||||
|
_doneBtn.titleLabel.font = self.pickerStyle.doneTextFont;
|
||||||
|
[_doneBtn setTitleColor:self.pickerStyle.doneTextColor forState:UIControlStateNormal];
|
||||||
|
[_doneBtn setTitle:self.pickerStyle.doneBtnTitle forState:UIControlStateNormal];
|
||||||
|
}
|
||||||
|
[_doneBtn addTarget:self action:@selector(clickDoneBtn) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
// 设置按钮圆角或边框
|
||||||
|
if (self.pickerStyle.doneBorderStyle == BRBorderStyleSolid) {
|
||||||
|
_doneBtn.layer.cornerRadius = self.pickerStyle.doneCornerRadius > 0 ? self.pickerStyle.doneCornerRadius : 6.0f;
|
||||||
|
_doneBtn.layer.borderColor = self.pickerStyle.doneTextColor.CGColor;
|
||||||
|
_doneBtn.layer.borderWidth = self.pickerStyle.doneBorderWidth > 0 ? self.pickerStyle.doneBorderWidth : 1.0f;
|
||||||
|
_doneBtn.layer.masksToBounds = YES;
|
||||||
|
} else if (self.pickerStyle.doneBorderStyle == BRBorderStyleFill) {
|
||||||
|
_doneBtn.layer.cornerRadius = self.pickerStyle.doneCornerRadius > 0 ? self.pickerStyle.doneCornerRadius : 6.0f;
|
||||||
|
_doneBtn.layer.masksToBounds = YES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _doneBtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 中间标题label
|
||||||
|
- (UILabel *)titleLabel {
|
||||||
|
if (!_titleLabel) {
|
||||||
|
_titleLabel = [[UILabel alloc]initWithFrame:self.pickerStyle.titleLabelFrame];
|
||||||
|
_titleLabel.backgroundColor = self.pickerStyle.titleLabelColor;
|
||||||
|
_titleLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin;
|
||||||
|
_titleLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
_titleLabel.font = self.pickerStyle.titleTextFont;
|
||||||
|
_titleLabel.textColor = self.pickerStyle.titleTextColor;
|
||||||
|
_titleLabel.text = self.title;
|
||||||
|
}
|
||||||
|
return _titleLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 点击蒙层视图事件
|
||||||
|
- (void)didTapMaskView:(UITapGestureRecognizer *)sender {
|
||||||
|
[self removePickerFromView:nil];
|
||||||
|
if (self.cancelBlock) {
|
||||||
|
self.cancelBlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 取消按钮的点击事件
|
||||||
|
- (void)clickCancelBtn {
|
||||||
|
[self removePickerFromView:nil];
|
||||||
|
if (self.cancelBlock) {
|
||||||
|
self.cancelBlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 确定按钮的点击事件
|
||||||
|
- (void)clickDoneBtn {
|
||||||
|
[self removePickerFromView:nil];
|
||||||
|
if (self.doneBlock) {
|
||||||
|
self.doneBlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 添加视图方法
|
||||||
|
- (void)addPickerToView:(UIView *)view {
|
||||||
|
if (view) {
|
||||||
|
self.frame = view.bounds;
|
||||||
|
self.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||||||
|
|
||||||
|
CGFloat accessoryViewHeight = 0;
|
||||||
|
if (self.pickerHeaderView) {
|
||||||
|
CGRect rect = self.pickerHeaderView.frame;
|
||||||
|
self.pickerHeaderView.frame = CGRectMake(0, 0, view.bounds.size.width, rect.size.height);
|
||||||
|
self.pickerHeaderView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
|
||||||
|
[self addSubview:self.pickerHeaderView];
|
||||||
|
|
||||||
|
accessoryViewHeight += self.pickerHeaderView.bounds.size.height;
|
||||||
|
}
|
||||||
|
if (self.pickerFooterView) {
|
||||||
|
CGRect rect = self.pickerFooterView.frame;
|
||||||
|
self.pickerFooterView.frame = CGRectMake(0, view.bounds.size.height - rect.size.height, view.bounds.size.width, rect.size.height);
|
||||||
|
self.pickerFooterView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
|
||||||
|
[self addSubview:self.pickerFooterView];
|
||||||
|
|
||||||
|
accessoryViewHeight += self.pickerFooterView.bounds.size.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
[view addSubview:self];
|
||||||
|
} else {
|
||||||
|
[self initUI];
|
||||||
|
|
||||||
|
if (self.pickerHeaderView) {
|
||||||
|
CGRect rect = self.pickerHeaderView.frame;
|
||||||
|
CGFloat titleBarHeight = self.pickerStyle.hiddenTitleBarView ? 0 : self.pickerStyle.titleBarHeight;
|
||||||
|
self.pickerHeaderView.frame = CGRectMake(0, titleBarHeight, self.alertView.bounds.size.width, rect.size.height);
|
||||||
|
self.pickerHeaderView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
|
||||||
|
[self.alertView addSubview:self.pickerHeaderView];
|
||||||
|
}
|
||||||
|
if (self.pickerFooterView) {
|
||||||
|
CGRect rect = self.pickerFooterView.frame;
|
||||||
|
self.pickerFooterView.frame = CGRectMake(0, self.alertView.bounds.size.height - self.pickerStyle.paddingBottom - rect.size.height, self.alertView.bounds.size.width, rect.size.height);
|
||||||
|
self.pickerFooterView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
|
||||||
|
[self.alertView addSubview:self.pickerFooterView];
|
||||||
|
}
|
||||||
|
|
||||||
|
[self.keyView addSubview:self];
|
||||||
|
|
||||||
|
// iOS16:重新设置 alertView 高度(解决懒加载设置frame不生效问题)
|
||||||
|
CGFloat accessoryViewHeight = 0;
|
||||||
|
if (self.pickerHeaderView) {
|
||||||
|
accessoryViewHeight += self.pickerHeaderView.bounds.size.height;
|
||||||
|
}
|
||||||
|
if (self.pickerFooterView) {
|
||||||
|
accessoryViewHeight += self.pickerFooterView.bounds.size.height;
|
||||||
|
}
|
||||||
|
CGFloat height = self.pickerStyle.titleBarHeight + self.pickerStyle.pickerHeight + self.pickerStyle.paddingBottom + accessoryViewHeight;
|
||||||
|
self.alertView.frame = CGRectMake(0, self.keyView.bounds.size.height - height, self.keyView.bounds.size.width, height);
|
||||||
|
|
||||||
|
// 动画前初始位置
|
||||||
|
CGRect rect = self.alertView.frame;
|
||||||
|
rect.origin.y = self.bounds.size.height;
|
||||||
|
self.alertView.frame = rect;
|
||||||
|
// 弹出动画
|
||||||
|
if (!self.pickerStyle.hiddenMaskView) {
|
||||||
|
self.maskView.alpha = 0;
|
||||||
|
}
|
||||||
|
[UIView animateWithDuration:0.3f animations:^{
|
||||||
|
if (!self.pickerStyle.hiddenMaskView) {
|
||||||
|
self.maskView.alpha = 1;
|
||||||
|
}
|
||||||
|
CGFloat alertViewHeight = self.alertView.bounds.size.height;
|
||||||
|
CGRect rect = self.alertView.frame;
|
||||||
|
rect.origin.y -= alertViewHeight;
|
||||||
|
self.alertView.frame = rect;
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 移除视图方法
|
||||||
|
- (void)removePickerFromView:(UIView *)view {
|
||||||
|
if (view) {
|
||||||
|
[self removeFromSuperview];
|
||||||
|
} else {
|
||||||
|
// 关闭动画
|
||||||
|
[UIView animateWithDuration:0.2f animations:^{
|
||||||
|
CGFloat alertViewHeight = self.alertView.bounds.size.height;
|
||||||
|
CGRect rect = self.alertView.frame;
|
||||||
|
rect.origin.y += alertViewHeight;
|
||||||
|
self.alertView.frame = rect;
|
||||||
|
if (!self.pickerStyle.hiddenMaskView) {
|
||||||
|
self.maskView.alpha = 0;
|
||||||
|
}
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
[self removeFromSuperview];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 刷新选择器数据
|
||||||
|
- (void)reloadData {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 添加自定义视图到选择器(picker)上
|
||||||
|
- (void)addSubViewToPicker:(UIView *)customView {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 添加自定义视图到标题栏(titleBar)上
|
||||||
|
- (void)addSubViewToTitleBar:(UIView *)customView {
|
||||||
|
if (!self.pickerStyle.hiddenTitleBarView) {
|
||||||
|
[self.titleBarView addSubview:customView];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BRPickerStyle *)pickerStyle {
|
||||||
|
if (!_pickerStyle) {
|
||||||
|
_pickerStyle = [[BRPickerStyle alloc]init];
|
||||||
|
}
|
||||||
|
return _pickerStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIView *)keyView {
|
||||||
|
if (!_keyView) {
|
||||||
|
_keyView = BRGetKeyWindow();
|
||||||
|
}
|
||||||
|
return _keyView;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - setter 方法(支持动态设置标题)
|
||||||
|
- (void)setTitle:(NSString *)title {
|
||||||
|
_title = title;
|
||||||
|
if (_titleLabel) {
|
||||||
|
_titleLabel.text = title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc {
|
||||||
|
NSLog(@"%@ dealloc", NSStringFromClass([self class]));
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
251
Pods/BRPickerView/BRPickerView/Base/BRPickerStyle.h
generated
Normal file
251
Pods/BRPickerView/BRPickerView/Base/BRPickerStyle.h
generated
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
//
|
||||||
|
// BRPickerStyle.h
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2019/10/2.
|
||||||
|
// Copyright © 2019 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "BRPickerViewMacro.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
// 边框样式(左边取消按钮/右边确定按钮)
|
||||||
|
typedef NS_ENUM(NSInteger, BRBorderStyle) {
|
||||||
|
/** 无边框(默认) */
|
||||||
|
BRBorderStyleNone = 0,
|
||||||
|
/** 有圆角和边框 */
|
||||||
|
BRBorderStyleSolid,
|
||||||
|
/** 仅有圆角 */
|
||||||
|
BRBorderStyleFill
|
||||||
|
};
|
||||||
|
|
||||||
|
@interface BRPickerStyle : NSObject
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////// 蒙层视图(maskView)///////////////////////////////
|
||||||
|
|
||||||
|
/** 设置背景颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *maskColor;
|
||||||
|
|
||||||
|
/** 隐藏 maskView,默认为 NO */
|
||||||
|
@property (nonatomic, assign) BOOL hiddenMaskView;
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////// 弹框视图(alertView)///////////////////////////////
|
||||||
|
|
||||||
|
/** 设置 alertView 弹框视图的背景颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *alertViewColor;
|
||||||
|
|
||||||
|
/** 设置 alertView 弹框视图左上和右上的圆角半径 */
|
||||||
|
@property (nonatomic, assign) NSInteger topCornerRadius;
|
||||||
|
|
||||||
|
/** 设置 alertView 弹框视图顶部边框线颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *shadowLineColor;
|
||||||
|
|
||||||
|
/** 设置 alertView 弹框视图顶部边框线高度 */
|
||||||
|
@property (nonatomic, assign) CGFloat shadowLineHeight;
|
||||||
|
|
||||||
|
/** 隐藏 alertView 弹框视图顶部边框线,默认为 NO */
|
||||||
|
@property (nonatomic, assign) BOOL hiddenShadowLine;
|
||||||
|
|
||||||
|
/** 设置 alertView 弹框视图底部内边距,默认为安全区域底部距屏幕底部的高度 */
|
||||||
|
@property (nonatomic, assign) CGFloat paddingBottom;
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////// 标题栏视图(titleBarView) ////////////////////////////
|
||||||
|
|
||||||
|
/** 设置 titleBarView 标题栏的背景颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *titleBarColor;
|
||||||
|
|
||||||
|
/** 设置 titleBarView 标题栏的高度 */
|
||||||
|
@property (nonatomic, assign) CGFloat titleBarHeight;
|
||||||
|
|
||||||
|
/** 设置 titleBarView 标题栏底部分割线颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *titleLineColor;
|
||||||
|
|
||||||
|
/** 隐藏 titleBarView 标题栏底部分割线,默认为 NO */
|
||||||
|
@property (nonatomic, assign) BOOL hiddenTitleLine;
|
||||||
|
|
||||||
|
/** 隐藏 titleBarView,默认为 NO */
|
||||||
|
@property (nonatomic, assign) BOOL hiddenTitleBarView;
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////// 标题栏中间label(titleLabel)///////////////////////////
|
||||||
|
|
||||||
|
/** 设置 titleLabel 的背景颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *titleLabelColor;
|
||||||
|
|
||||||
|
/** 设置 titleLabel 文本颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *titleTextColor;
|
||||||
|
|
||||||
|
/** 设置 titleLabel 字体大小 */
|
||||||
|
@property (nullable, nonatomic, strong) UIFont *titleTextFont;
|
||||||
|
|
||||||
|
/** 设置 titleLabel 的 frame */
|
||||||
|
@property (nonatomic, assign) CGRect titleLabelFrame;
|
||||||
|
|
||||||
|
/** 隐藏 titleLabel,默认为 NO */
|
||||||
|
@property (nonatomic, assign) BOOL hiddenTitleLabel;
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////// 取消按钮(cancelBtn)//////////////////////////////
|
||||||
|
|
||||||
|
/** 设置 cancelBtn 的背景颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *cancelColor;
|
||||||
|
|
||||||
|
/** 设置 cancelBtn 标题的颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *cancelTextColor;
|
||||||
|
|
||||||
|
/** 设置 cancelBtn 标题的字体 */
|
||||||
|
@property (nullable, nonatomic, strong) UIFont *cancelTextFont;
|
||||||
|
|
||||||
|
/** 设置 cancelBtn 的 frame */
|
||||||
|
@property (nonatomic, assign) CGRect cancelBtnFrame;
|
||||||
|
|
||||||
|
/** 设置 cancelBtn 的边框样式 */
|
||||||
|
@property (nonatomic, assign) BRBorderStyle cancelBorderStyle;
|
||||||
|
|
||||||
|
/** 设置 cancelBtn 的圆角大小 */
|
||||||
|
@property (nonatomic, assign) CGFloat cancelCornerRadius;
|
||||||
|
|
||||||
|
/** 设置 cancelBtn 的边框宽度 */
|
||||||
|
@property (nonatomic, assign) CGFloat cancelBorderWidth;
|
||||||
|
|
||||||
|
/** 设置 cancelBtn 的 image */
|
||||||
|
@property (nullable, nonatomic, strong) UIImage *cancelBtnImage;
|
||||||
|
|
||||||
|
/** 设置 cancelBtn 的 title */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *cancelBtnTitle;
|
||||||
|
|
||||||
|
/** 隐藏 cancelBtn,默认为 NO */
|
||||||
|
@property (nonatomic, assign) BOOL hiddenCancelBtn;
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////// 确定按钮(doneBtn)////////////////////////////////
|
||||||
|
|
||||||
|
/** 设置 doneBtn 的背景颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *doneColor;
|
||||||
|
|
||||||
|
/** 设置 doneBtn 标题的颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *doneTextColor;
|
||||||
|
|
||||||
|
/** 设置 doneBtn 标题的字体 */
|
||||||
|
@property (nullable, nonatomic, strong) UIFont *doneTextFont;
|
||||||
|
|
||||||
|
/** 设置 doneBtn 的 frame */
|
||||||
|
@property (nonatomic, assign) CGRect doneBtnFrame;
|
||||||
|
|
||||||
|
/** 设置 doneBtn 的边框样式 */
|
||||||
|
@property (nonatomic, assign) BRBorderStyle doneBorderStyle;
|
||||||
|
|
||||||
|
/** 设置 doneBtn 的圆角大小 */
|
||||||
|
@property (nonatomic, assign) CGFloat doneCornerRadius;
|
||||||
|
|
||||||
|
/** 设置 doneBtn 的边框宽度 */
|
||||||
|
@property (nonatomic, assign) CGFloat doneBorderWidth;
|
||||||
|
|
||||||
|
/** 设置 doneBtn 的 image */
|
||||||
|
@property (nullable, nonatomic, strong) UIImage *doneBtnImage;
|
||||||
|
|
||||||
|
/** 设置 doneBtn 的 title */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *doneBtnTitle;
|
||||||
|
|
||||||
|
/** 隐藏 doneBtn,默认为 NO */
|
||||||
|
@property (nonatomic, assign) BOOL hiddenDoneBtn;
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////// 选择器(pickerView)///////////////////////////////
|
||||||
|
|
||||||
|
/** 设置 picker 的背景颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *pickerColor;
|
||||||
|
|
||||||
|
/** 设置 picker 中间两条分割线的背景颜色。暂不支持日期选择器前4种类型 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *separatorColor;
|
||||||
|
|
||||||
|
/** 设置 picker 中间两条分割线的高度。暂不支持日期选择器前4种类型 */
|
||||||
|
@property (nonatomic, assign) CGFloat separatorHeight;
|
||||||
|
|
||||||
|
/** 设置 picker 文本的颜色。暂不支持日期选择器前4种类型 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *pickerTextColor;
|
||||||
|
|
||||||
|
/** 设置 picker 文本的字体。暂不支持日期选择器前4种类型 */
|
||||||
|
@property (nullable, nonatomic, strong) UIFont *pickerTextFont;
|
||||||
|
|
||||||
|
/** 设置 picker 中间选中行的背景颜色。暂不支持日期选择器前4种类型 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *selectRowColor;
|
||||||
|
|
||||||
|
/** 设置 picker 中间选中行文本的颜色。暂不支持日期选择器前4种类型 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *selectRowTextColor;
|
||||||
|
|
||||||
|
/** 设置 picker 中间选中行文本的字体。暂不支持日期选择器前4种类型 */
|
||||||
|
@property (nullable, nonatomic, strong) UIFont *selectRowTextFont;
|
||||||
|
|
||||||
|
/** 设置 picker 的高度,系统默认高度为 216 */
|
||||||
|
@property (nonatomic, assign) CGFloat pickerHeight;
|
||||||
|
|
||||||
|
/** 设置 picker 的行高。暂不支持日期选择器前4种类型 */
|
||||||
|
@property (nonatomic, assign) CGFloat rowHeight;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清除iOS14之后选择器默认自带的新样式。暂不支持日期选择器前4种类型
|
||||||
|
* 主要是:①隐藏中间选择行的背景样式,②清除默认的内边距,③新增中间选择行的两条分割线;与iOS14之前的样式保持一致),默认为 YES
|
||||||
|
*/
|
||||||
|
@property (nonatomic, assign) BOOL clearPickerNewStyle;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置语言(不设置或为nil时,将随系统的语言自动改变)
|
||||||
|
* language: zh-Hans(简体中文)、zh-Hant(繁体中文)、en(英语 )
|
||||||
|
*/
|
||||||
|
@property(nullable, nonatomic, copy) NSString *language;
|
||||||
|
|
||||||
|
|
||||||
|
/////// 日期选择器单位样式(showUnitType == BRShowUnitTypeOnlyCenter 时生效。暂不支持日期选择器前4种类型 )///////
|
||||||
|
|
||||||
|
/** 设置日期选择器单位文本的颜色 */
|
||||||
|
@property (nullable, nonatomic, strong) UIColor *dateUnitTextColor;
|
||||||
|
|
||||||
|
/** 设置日期选择器单位文本的字体 */
|
||||||
|
@property (nullable, nonatomic, strong) UIFont *dateUnitTextFont;
|
||||||
|
|
||||||
|
/** 设置日期选择器单位 label 的水平方向偏移量 */
|
||||||
|
@property (nonatomic, assign) CGFloat dateUnitOffsetX;
|
||||||
|
|
||||||
|
/** 设置日期选择器单位 label 的竖直方向偏移量 */
|
||||||
|
@property (nonatomic, assign) CGFloat dateUnitOffsetY;
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////// 常用的几种模板样式 ////////////////////////////////
|
||||||
|
|
||||||
|
/// 弹框模板样式1 - 取消/确定按钮圆角样式
|
||||||
|
/// @param themeColor 主题颜色
|
||||||
|
+ (instancetype)pickerStyleWithThemeColor:(nullable UIColor *)themeColor;
|
||||||
|
|
||||||
|
/// 弹框模板样式2 - 顶部圆角样式 + 完成按钮
|
||||||
|
/// @param doneTextColor 完成按钮标题的颜色
|
||||||
|
+ (instancetype)pickerStyleWithDoneTextColor:(nullable UIColor *)doneTextColor;
|
||||||
|
|
||||||
|
/// 弹框模板样式3 - 顶部圆角样式 + 图标按钮
|
||||||
|
/// @param doneBtnImage 完成按钮的 image
|
||||||
|
+ (instancetype)pickerStyleWithDoneBtnImage:(nullable UIImage *)doneBtnImage;
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////// 以下是组件内部使用的几个封装方法 ////////////////////////////////
|
||||||
|
|
||||||
|
/** 设置选择器中间选中行的样式 */
|
||||||
|
- (void)setupPickerSelectRowStyle:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
|
||||||
|
|
||||||
|
/** 添加选择器中间行上下两条分割线(iOS14之后系统默认去掉,需要手动添加)*/
|
||||||
|
- (void)addSeparatorLineView:(UIView *)pickerView;
|
||||||
|
|
||||||
|
/** 设置 view 的部分圆角 */
|
||||||
|
// corners(枚举类型,可组合使用):UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomLeft | UIRectCornerBottomRight | UIRectCornerAllCorners
|
||||||
|
+ (void)br_setView:(UIView *)view roundingCorners:(UIRectCorner)corners withRadius:(CGFloat)radius;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
494
Pods/BRPickerView/BRPickerView/Base/BRPickerStyle.m
generated
Normal file
494
Pods/BRPickerView/BRPickerView/Base/BRPickerStyle.m
generated
Normal file
@@ -0,0 +1,494 @@
|
|||||||
|
//
|
||||||
|
// BRPickerStyle.m
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2019/10/2.
|
||||||
|
// Copyright © 2019 irenb. All dones reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "BRPickerStyle.h"
|
||||||
|
#import "NSBundle+BRPickerView.h"
|
||||||
|
|
||||||
|
// 标题颜色
|
||||||
|
#define kBRDefaultTextColor BR_RGB_HEX(0x333333, 1.0f)
|
||||||
|
|
||||||
|
@implementation BRPickerStyle
|
||||||
|
|
||||||
|
- (instancetype)init {
|
||||||
|
if (self = [super init]) {
|
||||||
|
self.clearPickerNewStyle = YES;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 设置默认样式
|
||||||
|
|
||||||
|
- (UIColor *)maskColor {
|
||||||
|
if (!_maskColor) {
|
||||||
|
_maskColor = [self br_colorWithLightColor:BR_RGB_HEX(0x000000, 0.3f) darkColor:BR_RGB_HEX(0x666666, 0.3f)];
|
||||||
|
}
|
||||||
|
return _maskColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)shadowLineColor {
|
||||||
|
if (!_shadowLineColor) {
|
||||||
|
if (@available(iOS 13.0, *)) {
|
||||||
|
// 边框线颜色,有透明度
|
||||||
|
_shadowLineColor = [UIColor separatorColor];
|
||||||
|
} else {
|
||||||
|
_shadowLineColor = BR_RGB_HEX(0xc6c6c8, 1.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _shadowLineColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)shadowLineHeight {
|
||||||
|
if (_shadowLineHeight <= 0 || _shadowLineHeight > 5.0f) {
|
||||||
|
_shadowLineHeight = 0.5f;
|
||||||
|
}
|
||||||
|
return _shadowLineHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)paddingBottom {
|
||||||
|
if (_paddingBottom <= 0) {
|
||||||
|
_paddingBottom = BR_BOTTOM_MARGIN;
|
||||||
|
}
|
||||||
|
return _paddingBottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)titleBarColor {
|
||||||
|
if (!_titleBarColor) {
|
||||||
|
if (@available(iOS 13.0, *)) {
|
||||||
|
// #ffffff(正常)、#1c1c1e(深色)
|
||||||
|
_titleBarColor = [UIColor secondarySystemGroupedBackgroundColor];
|
||||||
|
} else {
|
||||||
|
_titleBarColor = [UIColor whiteColor];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _titleBarColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)titleBarHeight {
|
||||||
|
if (!self.hiddenTitleBarView) {
|
||||||
|
if (_titleBarHeight < 44.0f && (!self.hiddenCancelBtn || !self.hiddenDoneBtn || !self.hiddenTitleLabel)) {
|
||||||
|
_titleBarHeight = 44.0f;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_titleBarHeight = 0;
|
||||||
|
}
|
||||||
|
return _titleBarHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)titleLineColor {
|
||||||
|
if (!_titleLineColor) {
|
||||||
|
_titleLineColor = [self br_colorWithLightColor:BR_RGB_HEX(0xededee, 1.0f) darkColor:BR_RGB_HEX(0x18181c, 1.0f)];
|
||||||
|
}
|
||||||
|
return _titleLineColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)cancelColor {
|
||||||
|
if (!_cancelColor) {
|
||||||
|
_cancelColor = [UIColor clearColor];
|
||||||
|
}
|
||||||
|
return _cancelColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)cancelTextColor {
|
||||||
|
if (!_cancelTextColor) {
|
||||||
|
if (@available(iOS 13.0, *)) {
|
||||||
|
_cancelTextColor = [UIColor labelColor];
|
||||||
|
} else {
|
||||||
|
_cancelTextColor = kBRDefaultTextColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _cancelTextColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIFont *)cancelTextFont {
|
||||||
|
if (!_cancelTextFont) {
|
||||||
|
_cancelTextFont = [UIFont systemFontOfSize:16.0f];
|
||||||
|
}
|
||||||
|
return _cancelTextFont;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)cancelBtnTitle {
|
||||||
|
if (!_cancelBtnTitle && !_cancelBtnImage) {
|
||||||
|
_cancelBtnTitle = [NSBundle br_localizedStringForKey:@"取消" language:self.language];
|
||||||
|
}
|
||||||
|
return _cancelBtnTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGRect)cancelBtnFrame {
|
||||||
|
if (CGRectEqualToRect(_cancelBtnFrame, CGRectZero) || _cancelBtnFrame.size.height == 0) {
|
||||||
|
_cancelBtnFrame = CGRectMake(5, 8, 60, 28);
|
||||||
|
}
|
||||||
|
return _cancelBtnFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)titleLabelColor {
|
||||||
|
if (!_titleLabelColor) {
|
||||||
|
_titleLabelColor = [UIColor clearColor];
|
||||||
|
}
|
||||||
|
return _titleLabelColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)titleTextColor {
|
||||||
|
if (!_titleTextColor) {
|
||||||
|
if (@available(iOS 13.0, *)) {
|
||||||
|
_titleTextColor = [UIColor secondaryLabelColor];
|
||||||
|
} else {
|
||||||
|
_titleTextColor = BR_RGB_HEX(0x999999, 1.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _titleTextColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIFont *)titleTextFont {
|
||||||
|
if (!_titleTextFont) {
|
||||||
|
_titleTextFont = [UIFont systemFontOfSize:15.0f];
|
||||||
|
}
|
||||||
|
return _titleTextFont;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGRect)titleLabelFrame {
|
||||||
|
if (CGRectEqualToRect(_titleLabelFrame, CGRectZero) || _titleLabelFrame.size.height == 0) {
|
||||||
|
_titleLabelFrame = CGRectMake(5 + 60 + 2, 0, BRGetKeyWindow().bounds.size.width - 2 * (5 + 60 + 2), 44);
|
||||||
|
}
|
||||||
|
return _titleLabelFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)doneColor {
|
||||||
|
if (!_doneColor) {
|
||||||
|
_doneColor = [UIColor clearColor];
|
||||||
|
}
|
||||||
|
return _doneColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)doneTextColor {
|
||||||
|
if (!_doneTextColor) {
|
||||||
|
if (@available(iOS 13.0, *)) {
|
||||||
|
_doneTextColor = [UIColor labelColor];
|
||||||
|
} else {
|
||||||
|
_doneTextColor = kBRDefaultTextColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _doneTextColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIFont *)doneTextFont {
|
||||||
|
if (!_doneTextFont) {
|
||||||
|
_doneTextFont = [UIFont systemFontOfSize:16.0f];
|
||||||
|
}
|
||||||
|
return _doneTextFont;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)doneBtnTitle {
|
||||||
|
if (!_doneBtnTitle && !_doneBtnImage) {
|
||||||
|
_doneBtnTitle = [NSBundle br_localizedStringForKey:@"确定" language:self.language];
|
||||||
|
}
|
||||||
|
return _doneBtnTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGRect)doneBtnFrame {
|
||||||
|
if (CGRectEqualToRect(_doneBtnFrame, CGRectZero) || _doneBtnFrame.size.height == 0) {
|
||||||
|
_doneBtnFrame = CGRectMake(BRGetKeyWindow().bounds.size.width - 60 - 5, 8, 60, 28);
|
||||||
|
}
|
||||||
|
return _doneBtnFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)pickerColor {
|
||||||
|
if (!_pickerColor) {
|
||||||
|
if (@available(iOS 13.0, *)) {
|
||||||
|
// #ffffff(正常)、#1c1c1e(深色)
|
||||||
|
_pickerColor = [UIColor secondarySystemGroupedBackgroundColor];
|
||||||
|
} else {
|
||||||
|
_pickerColor = [UIColor whiteColor];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _pickerColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)separatorColor {
|
||||||
|
if (!_separatorColor) {
|
||||||
|
if (@available(iOS 13.0, *)) {
|
||||||
|
// 分割线颜色,无透明度
|
||||||
|
_separatorColor = [UIColor opaqueSeparatorColor];
|
||||||
|
} else {
|
||||||
|
_separatorColor = BR_RGB_HEX(0xc6c6c8, 1.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _separatorColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)pickerTextColor {
|
||||||
|
if (!_pickerTextColor) {
|
||||||
|
if (@available(iOS 13.0, *)) {
|
||||||
|
_pickerTextColor = [UIColor labelColor];
|
||||||
|
} else {
|
||||||
|
_pickerTextColor = kBRDefaultTextColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _pickerTextColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIFont *)pickerTextFont {
|
||||||
|
if (!_pickerTextFont) {
|
||||||
|
_pickerTextFont = [UIFont systemFontOfSize:18.0f];
|
||||||
|
}
|
||||||
|
return _pickerTextFont;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)pickerHeight {
|
||||||
|
if (_pickerHeight < 40) {
|
||||||
|
_pickerHeight = 216.0f;
|
||||||
|
}
|
||||||
|
return _pickerHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (CGFloat)rowHeight {
|
||||||
|
if (_rowHeight < 20) {
|
||||||
|
_rowHeight = 35.0f;
|
||||||
|
}
|
||||||
|
return _rowHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)language {
|
||||||
|
if (!_language) {
|
||||||
|
// 跟随系统的首选语言自动改变
|
||||||
|
// zh-Hans-CN(简体中文)、zh-Hant-CN(繁体中文)、en-CN(美式英语)、en-GB(英式英语)
|
||||||
|
// 其中`CN`是iOS9以后新增的地区代码,如:CN 代表中国,US 代表美国
|
||||||
|
_language = [NSLocale preferredLanguages].firstObject;
|
||||||
|
}
|
||||||
|
return _language;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIColor *)dateUnitTextColor {
|
||||||
|
if (!_dateUnitTextColor) {
|
||||||
|
if (@available(iOS 13.0, *)) {
|
||||||
|
_dateUnitTextColor = [UIColor labelColor];
|
||||||
|
} else {
|
||||||
|
_dateUnitTextColor = kBRDefaultTextColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _dateUnitTextColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIFont *)dateUnitTextFont {
|
||||||
|
if (!_dateUnitTextFont) {
|
||||||
|
_dateUnitTextFont = [UIFont systemFontOfSize:18.0f];
|
||||||
|
}
|
||||||
|
return _dateUnitTextFont;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 创建自定义动态颜色(适配深色模式)
|
||||||
|
- (UIColor *)br_colorWithLightColor:(UIColor *)lightColor darkColor:(UIColor *)darkColor {
|
||||||
|
if (@available(iOS 13.0, *)) {
|
||||||
|
UIColor *dyColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {
|
||||||
|
if ([traitCollection userInterfaceStyle] == UIUserInterfaceStyleLight) {
|
||||||
|
return lightColor;
|
||||||
|
} else {
|
||||||
|
return darkColor;
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
return dyColor;
|
||||||
|
} else {
|
||||||
|
return lightColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 弹框模板样式1 - 取消/确定按钮圆角样式
|
||||||
|
+ (instancetype)pickerStyleWithThemeColor:(UIColor *)themeColor {
|
||||||
|
BRPickerStyle *customStyle = [[self alloc]init];
|
||||||
|
if (themeColor) {
|
||||||
|
customStyle.cancelTextColor = themeColor;
|
||||||
|
customStyle.cancelBorderStyle = BRBorderStyleSolid;
|
||||||
|
customStyle.doneColor = themeColor;
|
||||||
|
customStyle.doneTextColor = [UIColor whiteColor];
|
||||||
|
customStyle.doneBorderStyle = BRBorderStyleFill;
|
||||||
|
}
|
||||||
|
return customStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 弹框模板样式2 - 顶部圆角样式 + 完成按钮
|
||||||
|
+ (instancetype)pickerStyleWithDoneTextColor:(UIColor *)doneTextColor {
|
||||||
|
BRPickerStyle *customStyle = [[self alloc]init];
|
||||||
|
if (doneTextColor) {
|
||||||
|
customStyle.topCornerRadius = 16.0f;
|
||||||
|
customStyle.hiddenCancelBtn = YES;
|
||||||
|
customStyle.hiddenTitleLine = YES;
|
||||||
|
customStyle.titleLabelFrame = CGRectMake(20, 4, 100, 40);
|
||||||
|
customStyle.doneTextColor = doneTextColor;
|
||||||
|
customStyle.doneTextFont = [UIFont boldSystemFontOfSize:18.0f];
|
||||||
|
customStyle.doneBtnFrame = CGRectMake(BRGetKeyWindow().bounds.size.width - 60, 4, 60, 40);
|
||||||
|
customStyle.doneBtnTitle = [NSBundle br_localizedStringForKey:@"完成" language:customStyle.language];
|
||||||
|
customStyle.selectRowTextColor = doneTextColor;
|
||||||
|
customStyle.selectRowTextFont = [UIFont boldSystemFontOfSize:20.0f];
|
||||||
|
}
|
||||||
|
return customStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 弹框模板样式3 - 顶部圆角样式 + 图标按钮
|
||||||
|
+ (instancetype)pickerStyleWithDoneBtnImage:(UIImage *)doneBtnImage {
|
||||||
|
BRPickerStyle *customStyle = [[self alloc]init];
|
||||||
|
if (doneBtnImage) {
|
||||||
|
customStyle.topCornerRadius = 16.0f;
|
||||||
|
customStyle.hiddenTitleLine = YES;
|
||||||
|
customStyle.hiddenCancelBtn = YES;
|
||||||
|
customStyle.titleLabelFrame = CGRectMake(20, 4, 100, 40);
|
||||||
|
customStyle.doneBtnImage = doneBtnImage;
|
||||||
|
customStyle.doneBtnFrame = CGRectMake(BRGetKeyWindow().bounds.size.width - 44, 4, 40, 40);
|
||||||
|
}
|
||||||
|
return customStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#pragma mark - 设置选择器中间选中行的样式
|
||||||
|
- (void)setupPickerSelectRowStyle:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
|
||||||
|
// 1.设置分割线的颜色
|
||||||
|
NSString *systemVersion = [UIDevice currentDevice].systemVersion;
|
||||||
|
if (systemVersion.doubleValue < 14.0) {
|
||||||
|
for (UIView *subView in pickerView.subviews) {
|
||||||
|
if (subView && [subView isKindOfClass:[UIView class]] && subView.frame.size.height <= 1) {
|
||||||
|
subView.backgroundColor = self.separatorColor;
|
||||||
|
// 设置分割线高度
|
||||||
|
if (self.separatorHeight > 0) {
|
||||||
|
CGRect rect = subView.frame;
|
||||||
|
rect.size.height = self.separatorHeight;
|
||||||
|
subView.frame = rect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.设置选择器中间选中行的背景颜色
|
||||||
|
UIView *contentView = nil;
|
||||||
|
NSArray *subviews = pickerView.subviews;
|
||||||
|
if (subviews.count > 0) {
|
||||||
|
id firstView = subviews.firstObject;
|
||||||
|
if (firstView && [firstView isKindOfClass:[UIView class]]) {
|
||||||
|
contentView = (UIView *)firstView;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (self.selectRowColor) {
|
||||||
|
UIView *columnView = nil;
|
||||||
|
if (contentView) {
|
||||||
|
id obj = [contentView valueForKey:@"subviewCache"];
|
||||||
|
if (obj && [obj isKindOfClass:[NSArray class]]) {
|
||||||
|
NSArray *columnViews = (NSArray *)obj;
|
||||||
|
if (columnViews.count > 0) {
|
||||||
|
id columnObj = columnViews.firstObject;
|
||||||
|
if (columnObj && [columnObj isKindOfClass:[UIView class]]) {
|
||||||
|
columnView = (UIView *)columnObj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (columnView) {
|
||||||
|
id obj = [columnView valueForKey:@"middleContainerView"];
|
||||||
|
if (obj && [obj isKindOfClass:[UIView class]]) {
|
||||||
|
UIView *selectRowView = (UIView *)obj;
|
||||||
|
// 中间选中行的背景颜色
|
||||||
|
selectRowView.backgroundColor = self.selectRowColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (contentView && self.clearPickerNewStyle) {
|
||||||
|
if (systemVersion.doubleValue >= 14.0) {
|
||||||
|
// ①隐藏中间选择行的背景样式
|
||||||
|
id lastView = subviews.lastObject;
|
||||||
|
if (lastView && [lastView isKindOfClass:[UIView class]]) {
|
||||||
|
UIView *rectBgView = (UIView *)lastView;
|
||||||
|
rectBgView.hidden = YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ②清除iOS14上选择器默认的内边距
|
||||||
|
if (systemVersion.doubleValue < 15.0f) {
|
||||||
|
[self setPickerAllSubViewsStyle:contentView];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3.设置选择器中间选中行的字体颜色/字体大小
|
||||||
|
if (self.selectRowTextColor || self.selectRowTextFont) {
|
||||||
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||||
|
// 当前选中的 label
|
||||||
|
UILabel *selectLabel = (UILabel *)[pickerView viewForRow:row forComponent:component];
|
||||||
|
if (selectLabel) {
|
||||||
|
if (self.selectRowTextColor) {
|
||||||
|
selectLabel.textColor = self.selectRowTextColor;
|
||||||
|
}
|
||||||
|
if (self.selectRowTextFont) {
|
||||||
|
selectLabel.font = self.selectRowTextFont;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 遍历子视图,重新设置 frame(清空在 iOS14 上 UIPickerView 出现的内边距)
|
||||||
|
- (void)setPickerAllSubViewsStyle:(UIView *)view {
|
||||||
|
NSArray *subViews = view.subviews;
|
||||||
|
if (subViews.count == 0 || [view isKindOfClass:[UILabel class]]) return;
|
||||||
|
for (UIView *subView in subViews) {
|
||||||
|
NSString *className = NSStringFromClass([subView class]);
|
||||||
|
if ([className isEqualToString:@"UIPickerColumnView"]) {
|
||||||
|
CGRect rect = subView.frame;
|
||||||
|
rect.origin.x = 0;
|
||||||
|
rect.size.width = view.bounds.size.width;
|
||||||
|
subView.frame = rect;
|
||||||
|
}
|
||||||
|
NSString *superClassName = NSStringFromClass([view class]);
|
||||||
|
if ([superClassName isEqualToString:@"UIPickerColumnView"]) {
|
||||||
|
CGRect rect = subView.frame;
|
||||||
|
rect.size.width = view.bounds.size.width;
|
||||||
|
subView.frame = rect;
|
||||||
|
}
|
||||||
|
if ([subView isKindOfClass:[UILabel class]]) {
|
||||||
|
CGRect rect = subView.frame;
|
||||||
|
rect.origin.x = 10;
|
||||||
|
subView.frame = rect;
|
||||||
|
}
|
||||||
|
|
||||||
|
[self setPickerAllSubViewsStyle:subView];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 添加选择器中间行上下两条分割线(iOS14之后系统默认去掉,需要手动添加)
|
||||||
|
- (void)addSeparatorLineView:(UIView *)pickerView {
|
||||||
|
if ([UIDevice currentDevice].systemVersion.doubleValue >= 14.0) {
|
||||||
|
UIView *topLineView = [[UIView alloc]initWithFrame:CGRectMake(0, pickerView.bounds.size.height / 2 - self.rowHeight / 2, pickerView.bounds.size.width, 0.5f)];
|
||||||
|
topLineView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
|
||||||
|
topLineView.backgroundColor = self.separatorColor;
|
||||||
|
// 设置分割线高度
|
||||||
|
if (self.separatorHeight > 0) {
|
||||||
|
CGRect topRect = topLineView.frame;
|
||||||
|
topRect.size.height = self.separatorHeight;
|
||||||
|
topLineView.frame = topRect;
|
||||||
|
}
|
||||||
|
[pickerView addSubview:topLineView];
|
||||||
|
|
||||||
|
UIView *bottomLineView = [[UIView alloc]initWithFrame:CGRectMake(0, pickerView.bounds.size.height / 2 + self.rowHeight / 2, pickerView.bounds.size.width, 0.5f)];
|
||||||
|
bottomLineView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
|
||||||
|
bottomLineView.backgroundColor = self.separatorColor;
|
||||||
|
// 设置分割线高度
|
||||||
|
if (self.separatorHeight > 0) {
|
||||||
|
CGRect bottomRect = bottomLineView.frame;
|
||||||
|
bottomRect.size.height = self.separatorHeight;
|
||||||
|
bottomLineView.frame = bottomRect;
|
||||||
|
}
|
||||||
|
[pickerView addSubview:bottomLineView];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 设置 view 的部分圆角
|
||||||
|
// corners(枚举类型,可组合使用):UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomLeft | UIRectCornerBottomRight | UIRectCornerAllCorners
|
||||||
|
+ (void)br_setView:(UIView *)view roundingCorners:(UIRectCorner)corners withRadius:(CGFloat)radius {
|
||||||
|
UIBezierPath *rounded = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(radius, radius)];
|
||||||
|
CAShapeLayer *shape = [[CAShapeLayer alloc]init];
|
||||||
|
[shape setPath:rounded.CGPath];
|
||||||
|
view.layer.mask = shape;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
35
Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/en.lproj/Localizable.strings
generated
Normal file
35
Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/en.lproj/Localizable.strings
generated
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
Localizable.strings
|
||||||
|
BRPickerViewDemo
|
||||||
|
|
||||||
|
Created by renbo on 2019/10/30.
|
||||||
|
Copyright © 2019 irenb. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
"确定" = "OK";
|
||||||
|
"取消" = "Cancel";
|
||||||
|
"完成" = "Done";
|
||||||
|
|
||||||
|
"年" = " ";
|
||||||
|
"月" = " ";
|
||||||
|
"日" = " ";
|
||||||
|
"时" = " ";
|
||||||
|
"分" = " ";
|
||||||
|
"秒" = " ";
|
||||||
|
|
||||||
|
"周" = " ";
|
||||||
|
"季度" = " ";
|
||||||
|
|
||||||
|
"上午" = "AM";
|
||||||
|
"下午" = "PM";
|
||||||
|
|
||||||
|
"至今" = " Now";
|
||||||
|
"今天" = " Today";
|
||||||
|
|
||||||
|
"周一" = " Mon";
|
||||||
|
"周二" = " Tue";
|
||||||
|
"周三" = " Wed";
|
||||||
|
"周四" = " Thu";
|
||||||
|
"周五" = " Fri";
|
||||||
|
"周六" = " Sat";
|
||||||
|
"周日" = " Sun";
|
||||||
35
Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/zh-Hans.lproj/Localizable.strings
generated
Normal file
35
Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/zh-Hans.lproj/Localizable.strings
generated
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
Localizable.strings
|
||||||
|
BRPickerViewDemo
|
||||||
|
|
||||||
|
Created by renbo on 2019/10/30.
|
||||||
|
Copyright © 2019 irenb. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
"确定" = "确定";
|
||||||
|
"取消" = "取消";
|
||||||
|
"完成" = "完成";
|
||||||
|
|
||||||
|
"年" = "年";
|
||||||
|
"月" = "月";
|
||||||
|
"日" = "日";
|
||||||
|
"时" = "时";
|
||||||
|
"分" = "分";
|
||||||
|
"秒" = "秒";
|
||||||
|
|
||||||
|
"周" = "周";
|
||||||
|
"季度" = "季度";
|
||||||
|
|
||||||
|
"上午" = "上午";
|
||||||
|
"下午" = "下午";
|
||||||
|
|
||||||
|
"至今" = "至今";
|
||||||
|
"今天" = "今天";
|
||||||
|
|
||||||
|
"周一" = "周一";
|
||||||
|
"周二" = "周二";
|
||||||
|
"周三" = "周三";
|
||||||
|
"周四" = "周四";
|
||||||
|
"周五" = "周五";
|
||||||
|
"周六" = "周六";
|
||||||
|
"周日" = "周日";
|
||||||
35
Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/zh-Hant.lproj/Localizable.strings
generated
Normal file
35
Pods/BRPickerView/BRPickerView/Base/BRPickerView.bundle/zh-Hant.lproj/Localizable.strings
generated
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
Localizable.strings
|
||||||
|
BRPickerViewDemo
|
||||||
|
|
||||||
|
Created by renbo on 2019/10/30.
|
||||||
|
Copyright © 2019 irenb. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
"确定" = "確定";
|
||||||
|
"取消" = "取消";
|
||||||
|
"完成" = "完成";
|
||||||
|
|
||||||
|
"年" = "年";
|
||||||
|
"月" = "月";
|
||||||
|
"日" = "日";
|
||||||
|
"时" = "時";
|
||||||
|
"分" = "分";
|
||||||
|
"秒" = "秒";
|
||||||
|
|
||||||
|
"周" = "周";
|
||||||
|
"季度" = "季度";
|
||||||
|
|
||||||
|
"上午" = "上午";
|
||||||
|
"下午" = "下午";
|
||||||
|
|
||||||
|
"至今" = "至今";
|
||||||
|
"今天" = "今天";
|
||||||
|
|
||||||
|
"周一" = "周壹";
|
||||||
|
"周二" = "周二";
|
||||||
|
"周三" = "周三";
|
||||||
|
"周四" = "周四";
|
||||||
|
"周五" = "周五";
|
||||||
|
"周六" = "周六";
|
||||||
|
"周日" = "周日";
|
||||||
87
Pods/BRPickerView/BRPickerView/Base/BRPickerViewMacro.h
generated
Normal file
87
Pods/BRPickerView/BRPickerView/Base/BRPickerViewMacro.h
generated
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
//
|
||||||
|
// BRPickerViewMacro.h
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2018/4/23.
|
||||||
|
// Copyright © 2018 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#ifndef BRPickerViewMacro_h
|
||||||
|
#define BRPickerViewMacro_h
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
// 屏幕安全区域下边距
|
||||||
|
#define BR_BOTTOM_MARGIN \
|
||||||
|
({CGFloat safeBottomHeight = 0;\
|
||||||
|
if (@available(iOS 11.0, *)) {\
|
||||||
|
safeBottomHeight = BRGetKeyWindow().safeAreaInsets.bottom;\
|
||||||
|
}\
|
||||||
|
(safeBottomHeight);})
|
||||||
|
|
||||||
|
|
||||||
|
// 静态库中编写 Category 时的便利宏,用于解决 Category 方法从静态库中加载需要特别设置的问题
|
||||||
|
#ifndef BRSYNTH_DUMMY_CLASS
|
||||||
|
|
||||||
|
#define BRSYNTH_DUMMY_CLASS(_name_) \
|
||||||
|
@interface BRSYNTH_DUMMY_CLASS_ ## _name_ : NSObject @end \
|
||||||
|
@implementation BRSYNTH_DUMMY_CLASS_ ## _name_ @end
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// 打印错误日志
|
||||||
|
#ifdef DEBUG
|
||||||
|
#define BRErrorLog(...) NSLog(@"reason: %@", [NSString stringWithFormat:__VA_ARGS__])
|
||||||
|
#else
|
||||||
|
#define BRErrorLog(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/** RGB颜色(16进制) */
|
||||||
|
static inline UIColor *BR_RGB_HEX(uint32_t rgbValue, CGFloat alpha) {
|
||||||
|
return [UIColor colorWithRed:((CGFloat)((rgbValue & 0xFF0000) >> 16)) / 255.0
|
||||||
|
green:((CGFloat)((rgbValue & 0xFF00) >> 8)) / 255.0
|
||||||
|
blue:((CGFloat)(rgbValue & 0xFF)) / 255.0
|
||||||
|
alpha:(alpha)];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** 获取 keyWindow */
|
||||||
|
static inline UIWindow *BRGetKeyWindow(void) {
|
||||||
|
UIWindow *keyWindow = nil;
|
||||||
|
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 // 编译时检查SDK版本(兼容不同版本的Xcode,防止编译报错)
|
||||||
|
if (@available(iOS 13.0, *)) { // 运行时检查系统版本(兼容不同版本的系统,防止运行报错)
|
||||||
|
NSSet<UIScene *> *connectedScenes = [UIApplication sharedApplication].connectedScenes;
|
||||||
|
for (UIScene *scene in connectedScenes) {
|
||||||
|
if (scene.activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:[UIWindowScene class]]) {
|
||||||
|
UIWindowScene *windowScene = (UIWindowScene *)scene;
|
||||||
|
for (UIWindow *window in windowScene.windows) {
|
||||||
|
if (window.isKeyWindow) {
|
||||||
|
keyWindow = window;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!keyWindow) {
|
||||||
|
keyWindow = [UIApplication sharedApplication].windows.firstObject;
|
||||||
|
if (!keyWindow.isKeyWindow) {
|
||||||
|
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
|
||||||
|
UIWindow *window = [UIApplication sharedApplication].keyWindow;
|
||||||
|
if (CGRectEqualToRect(window.bounds, UIScreen.mainScreen.bounds)) {
|
||||||
|
keyWindow = window;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return keyWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* BRPickerViewMacro_h */
|
||||||
26
Pods/BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.h
generated
Normal file
26
Pods/BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.h
generated
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// NSBundle+BRPickerView.h
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2019/10/30.
|
||||||
|
// Copyright © 2019 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface NSBundle (BRPickerView)
|
||||||
|
|
||||||
|
/// 获取 BRPickerView.bundle
|
||||||
|
+ (instancetype)br_pickerBundle;
|
||||||
|
|
||||||
|
/// 获取国际化后的文本
|
||||||
|
/// @param key 代表 Localizable.strings 文件中 key-value 中的 key。
|
||||||
|
/// @param language 设置语言(可为空,为nil时将随系统的语言自动改变)
|
||||||
|
+ (NSString *)br_localizedStringForKey:(NSString *)key language:(NSString *)language;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
68
Pods/BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.m
generated
Normal file
68
Pods/BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.m
generated
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
//
|
||||||
|
// NSBundle+BRPickerView.m
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2019/10/30.
|
||||||
|
// Copyright © 2019 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "NSBundle+BRPickerView.h"
|
||||||
|
#import "BRBaseView.h"
|
||||||
|
|
||||||
|
BRSYNTH_DUMMY_CLASS(NSBundle_BRPickerView)
|
||||||
|
|
||||||
|
@implementation NSBundle (BRPickerView)
|
||||||
|
|
||||||
|
#pragma mark - 获取 BRPickerView.bundle
|
||||||
|
+ (instancetype)br_pickerBundle {
|
||||||
|
static NSBundle *pickerBundle = nil;
|
||||||
|
if (!pickerBundle) {
|
||||||
|
/*
|
||||||
|
先拿到最外面的 bundle。
|
||||||
|
对 framework 链接方式来说就是 framework 的 bundle 根目录,
|
||||||
|
对静态库链接方式来说就是 target client 的 main bundle,
|
||||||
|
然后再去找下面名为 BRPickerView 的 bundle 对象。
|
||||||
|
*/
|
||||||
|
NSBundle *bundle = [NSBundle bundleForClass:[BRBaseView class]];
|
||||||
|
NSURL *url = [bundle URLForResource:@"BRPickerView" withExtension:@"bundle"];
|
||||||
|
pickerBundle = [NSBundle bundleWithURL:url];
|
||||||
|
}
|
||||||
|
return pickerBundle;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取国际化后的文本
|
||||||
|
+ (NSString *)br_localizedStringForKey:(NSString *)key language:(NSString *)language {
|
||||||
|
return [self br_localizedStringForKey:key value:nil language:language];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSString *)br_localizedStringForKey:(NSString *)key value:(NSString *)value language:(NSString *)language {
|
||||||
|
static NSBundle *bundle = nil;
|
||||||
|
if (!bundle) {
|
||||||
|
// 如果没有手动设置语言,将随系统的语言自动改变
|
||||||
|
if (!language) {
|
||||||
|
// 系统首选语言
|
||||||
|
language = [NSLocale preferredLanguages].firstObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([language hasPrefix:@"en"]) {
|
||||||
|
language = @"en";
|
||||||
|
} else if ([language hasPrefix:@"zh"]) {
|
||||||
|
if ([language rangeOfString:@"Hans"].location != NSNotFound) {
|
||||||
|
language = @"zh-Hans"; // 简体中文
|
||||||
|
} else { // zh-Hant、zh-HK、zh-TW
|
||||||
|
language = @"zh-Hant"; // 繁體中文
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
language = @"en";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 从 BRPickerView.bundle 中查找资源
|
||||||
|
bundle = [NSBundle bundleWithPath:[[self br_pickerBundle] pathForResource:language ofType:@"lproj"]];
|
||||||
|
}
|
||||||
|
value = [bundle localizedStringForKey:key value:value table:nil];
|
||||||
|
|
||||||
|
return [[NSBundle mainBundle] localizedStringForKey:key value:value table:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
111
Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.h
generated
Normal file
111
Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.h
generated
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
//
|
||||||
|
// BRDatePickerView+BR.h
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2020/6/16.
|
||||||
|
// Copyright © 2020 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "BRDatePickerView.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface BRDatePickerView (BR)
|
||||||
|
|
||||||
|
/** 最小日期 */
|
||||||
|
- (NSDate *)handlerMinDate:(nullable NSDate *)minDate;
|
||||||
|
|
||||||
|
/** 最大日期 */
|
||||||
|
- (NSDate *)handlerMaxDate:(nullable NSDate *)maxDate;
|
||||||
|
|
||||||
|
/** 默认选中的日期 */
|
||||||
|
- (NSDate *)handlerSelectDate:(nullable NSDate *)selectDate dateFormat:(NSString *)dateFormat;
|
||||||
|
|
||||||
|
/** NSDate 转 NSString */
|
||||||
|
- (NSString *)br_stringFromDate:(NSDate *)date dateFormat:(NSString *)dateFormat;
|
||||||
|
|
||||||
|
/** NSString 转 NSDate */
|
||||||
|
- (NSDate *)br_dateFromString:(NSString *)dateString dateFormat:(NSString *)dateFormat;
|
||||||
|
|
||||||
|
/** 比较两个日期大小(可以指定比较级数,即按指定格式进行比较) */
|
||||||
|
- (NSComparisonResult)br_compareDate:(NSDate *)date targetDate:(NSDate *)targetDate dateFormat:(NSString *)dateFormat;
|
||||||
|
|
||||||
|
/** 获取 yearArr 数组 */
|
||||||
|
- (NSArray *)getYearArr;
|
||||||
|
|
||||||
|
/** 获取 monthArr 数组 */
|
||||||
|
- (NSArray *)getMonthArr:(NSInteger)year;
|
||||||
|
|
||||||
|
/** 获取 dayArr 数组 */
|
||||||
|
- (NSArray *)getDayArr:(NSInteger)year month:(NSInteger)month;
|
||||||
|
|
||||||
|
/** 获取 hourArr 数组 */
|
||||||
|
- (NSArray *)getHourArr:(NSInteger)year month:(NSInteger)month day:(NSInteger)day;
|
||||||
|
|
||||||
|
/** 获取 minuteArr 数组 */
|
||||||
|
- (NSArray *)getMinuteArr:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour;
|
||||||
|
|
||||||
|
/** 获取 secondArr 数组 */
|
||||||
|
- (NSArray *)getSecondArr:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute;
|
||||||
|
|
||||||
|
/** 获取 monthWeekArr 数组 */
|
||||||
|
- (NSArray *)getMonthWeekArr:(NSInteger)year month:(NSInteger)month;
|
||||||
|
|
||||||
|
/** 获取 yearWeekArr 数组 */
|
||||||
|
- (NSArray *)getYearWeekArr:(NSInteger)year;
|
||||||
|
|
||||||
|
/** 获取 quarterArr 数组 */
|
||||||
|
- (NSArray *)getQuarterArr:(NSInteger)year;
|
||||||
|
|
||||||
|
/** 添加 pickerView */
|
||||||
|
- (void)setupPickerView:(UIView *)pickerView toView:(UIView *)view;
|
||||||
|
|
||||||
|
/** 设置日期单位 */
|
||||||
|
- (NSArray *)setupPickerUnitLabel:(UIPickerView *)pickerView unitArr:(NSArray *)unitArr;
|
||||||
|
|
||||||
|
- (NSString *)getYearNumber:(NSInteger)year;
|
||||||
|
|
||||||
|
- (NSString *)getMDHMSNumber:(NSInteger)number;
|
||||||
|
|
||||||
|
- (NSString *)getYearText:(NSArray *)yearArr row:(NSInteger)row;
|
||||||
|
|
||||||
|
- (NSString *)getMonthText:(NSArray *)monthArr row:(NSInteger)row;
|
||||||
|
|
||||||
|
- (NSString *)getDayText:(NSArray *)dayArr row:(NSInteger)row mSelectDate:(NSDate *)mSelectDate;
|
||||||
|
|
||||||
|
- (NSString *)getHourText:(NSArray *)hourArr row:(NSInteger)row;
|
||||||
|
|
||||||
|
- (NSString *)getMinuteText:(NSArray *)minuteArr row:(NSInteger)row;
|
||||||
|
|
||||||
|
- (NSString *)getSecondText:(NSArray *)secondArr row:(NSInteger)row;
|
||||||
|
|
||||||
|
- (NSString *)getWeekText:(NSArray *)weekArr row:(NSInteger)row;
|
||||||
|
|
||||||
|
- (NSString *)getQuarterText:(NSArray *)quarterArr row:(NSInteger)row;
|
||||||
|
|
||||||
|
- (NSString *)getAMText;
|
||||||
|
|
||||||
|
- (NSString *)getPMText;
|
||||||
|
|
||||||
|
- (NSString *)getYearUnit;
|
||||||
|
|
||||||
|
- (NSString *)getMonthUnit;
|
||||||
|
|
||||||
|
- (NSString *)getDayUnit;
|
||||||
|
|
||||||
|
- (NSString *)getHourUnit;
|
||||||
|
|
||||||
|
- (NSString *)getMinuteUnit;
|
||||||
|
|
||||||
|
- (NSString *)getSecondUnit;
|
||||||
|
|
||||||
|
- (NSString *)getWeekUnit;
|
||||||
|
|
||||||
|
- (NSString *)getQuarterUnit;
|
||||||
|
|
||||||
|
- (NSInteger)getIndexWithArray:(NSArray *)array object:(NSString *)obj;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
755
Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.m
generated
Normal file
755
Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.m
generated
Normal file
@@ -0,0 +1,755 @@
|
|||||||
|
//
|
||||||
|
// BRDatePickerView+BR.m
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2020/6/16.
|
||||||
|
// Copyright © 2020 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "BRDatePickerView+BR.h"
|
||||||
|
#import "NSBundle+BRPickerView.h"
|
||||||
|
|
||||||
|
BRSYNTH_DUMMY_CLASS(BRDatePickerView_BR)
|
||||||
|
|
||||||
|
//////////////////////////////////////////
|
||||||
|
/// 本分类主要是给 BRDatePickerView 文件瘦身
|
||||||
|
//////////////////////////////////////////
|
||||||
|
|
||||||
|
@implementation BRDatePickerView (BR)
|
||||||
|
|
||||||
|
#pragma mark - 最小日期
|
||||||
|
- (NSDate *)handlerMinDate:(NSDate *)minDate {
|
||||||
|
if (!minDate) {
|
||||||
|
if (self.pickerMode == BRDatePickerModeMDHM) {
|
||||||
|
minDate = [NSDate br_setMonth:1 day:1 hour:0 minute:0];
|
||||||
|
} else if (self.pickerMode == BRDatePickerModeMD) {
|
||||||
|
minDate = [NSDate br_setMonth:1 day:1];
|
||||||
|
} else if (self.pickerMode == BRDatePickerModeTime || self.pickerMode == BRDatePickerModeCountDownTimer || self.pickerMode == BRDatePickerModeHM) {
|
||||||
|
minDate = [NSDate br_setHour:0 minute:0];
|
||||||
|
} else if (self.pickerMode == BRDatePickerModeHMS) {
|
||||||
|
minDate = [NSDate br_setHour:0 minute:0 second:0];
|
||||||
|
} else if (self.pickerMode == BRDatePickerModeMS) {
|
||||||
|
minDate = [NSDate br_setMinute:0 second:0];
|
||||||
|
} else {
|
||||||
|
minDate = [NSDate distantPast]; // 遥远的过去的一个时间点
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return minDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 最大日期
|
||||||
|
- (NSDate *)handlerMaxDate:(NSDate *)maxDate {
|
||||||
|
if (!maxDate) {
|
||||||
|
if (self.pickerMode == BRDatePickerModeMDHM) {
|
||||||
|
maxDate = [NSDate br_setMonth:12 day:31 hour:23 minute:59];
|
||||||
|
} else if (self.pickerMode == BRDatePickerModeMD) {
|
||||||
|
maxDate = [NSDate br_setMonth:12 day:31];
|
||||||
|
} else if (self.pickerMode == BRDatePickerModeTime || self.pickerMode == BRDatePickerModeCountDownTimer || self.pickerMode == BRDatePickerModeHM) {
|
||||||
|
maxDate = [NSDate br_setHour:23 minute:59];
|
||||||
|
} else if (self.pickerMode == BRDatePickerModeHMS) {
|
||||||
|
maxDate = [NSDate br_setHour:23 minute:59 second:59];
|
||||||
|
} else if (self.pickerMode == BRDatePickerModeMS) {
|
||||||
|
maxDate = [NSDate br_setMinute:59 second:59];
|
||||||
|
} else {
|
||||||
|
maxDate = [NSDate distantFuture]; // 遥远的未来的一个时间点
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return maxDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 默认选中的日期
|
||||||
|
- (NSDate *)handlerSelectDate:(NSDate *)selectDate dateFormat:(NSString *)dateFormat {
|
||||||
|
// selectDate 优先级高于 selectValue(推荐使用 selectDate 设置默认选中的日期)
|
||||||
|
if (!selectDate) {
|
||||||
|
if (self.selectValue && self.selectValue.length > 0) {
|
||||||
|
if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) {
|
||||||
|
NSString *firstString = [[self.selectValue componentsSeparatedByString:@" "] firstObject];
|
||||||
|
NSString *lastString = [[self.selectValue componentsSeparatedByString:@" "] lastObject];
|
||||||
|
if ([lastString isEqualToString:[self getAMText]]) {
|
||||||
|
self.selectValue = [NSString stringWithFormat:@"%@ 00", firstString];
|
||||||
|
}
|
||||||
|
if ([lastString isEqualToString:[self getPMText]]) {
|
||||||
|
self.selectValue = [NSString stringWithFormat:@"%@ 12", firstString];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NSDate *date = nil;
|
||||||
|
if ([self.selectValue isEqualToString:self.lastRowContent]) {
|
||||||
|
date = self.addToNow ? [NSDate date] : nil;
|
||||||
|
} else if ([self.selectValue isEqualToString:self.firstRowContent]) {
|
||||||
|
date = nil;
|
||||||
|
} else {
|
||||||
|
date = [self br_dateFromString:self.selectValue dateFormat:dateFormat];
|
||||||
|
if (!date) {
|
||||||
|
BRErrorLog(@"参数异常!字符串 selectValue 的正确格式是:%@", dateFormat);
|
||||||
|
NSAssert(date, @"参数异常!请检查字符串 selectValue 的格式");
|
||||||
|
date = [NSDate date]; // 默认值参数格式错误时,重置/忽略默认值,防止在 Release 环境下崩溃!
|
||||||
|
}
|
||||||
|
if (self.pickerMode == BRDatePickerModeMDHM) {
|
||||||
|
selectDate = [NSDate br_setMonth:date.br_month day:date.br_day hour:date.br_hour minute:date.br_minute];
|
||||||
|
} else if (self.pickerMode == BRDatePickerModeMD) {
|
||||||
|
selectDate = [NSDate br_setMonth:date.br_month day:date.br_day];
|
||||||
|
} else if (self.pickerMode == BRDatePickerModeTime || self.pickerMode == BRDatePickerModeCountDownTimer || self.pickerMode == BRDatePickerModeHM) {
|
||||||
|
selectDate = [NSDate br_setHour:date.br_hour minute:date.br_minute];
|
||||||
|
} else if (self.pickerMode == BRDatePickerModeHMS) {
|
||||||
|
selectDate = [NSDate br_setHour:date.br_hour minute:date.br_minute second:date.br_second];
|
||||||
|
} else if (self.pickerMode == BRDatePickerModeMS) {
|
||||||
|
selectDate = [NSDate br_setMinute:date.br_minute second:date.br_second];
|
||||||
|
} else {
|
||||||
|
selectDate = date;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 不设置默认日期
|
||||||
|
if (self.pickerMode == BRDatePickerModeTime ||
|
||||||
|
self.pickerMode == BRDatePickerModeCountDownTimer ||
|
||||||
|
self.pickerMode == BRDatePickerModeHM ||
|
||||||
|
self.pickerMode == BRDatePickerModeHMS ||
|
||||||
|
self.pickerMode == BRDatePickerModeMS) {
|
||||||
|
// 默认选中最小日期
|
||||||
|
selectDate = self.minDate;
|
||||||
|
} else {
|
||||||
|
if (self.minuteInterval > 1 || self.secondInterval > 1) {
|
||||||
|
NSDate *date = [NSDate date];
|
||||||
|
NSInteger minute = self.minDate.br_minute % self.minuteInterval == 0 ? self.minDate.br_minute : 0;
|
||||||
|
NSInteger second = self.minDate.br_second % self.secondInterval == 0 ? self.minDate.br_second : 0;
|
||||||
|
selectDate = [NSDate br_setYear:date.br_year month:date.br_month day:date.br_day hour:date.br_hour minute:minute second:second];
|
||||||
|
} else {
|
||||||
|
// 默认选中今天的日期
|
||||||
|
selectDate = [NSDate date];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断日期是否超过边界限制
|
||||||
|
BOOL selectLessThanMin = [self br_compareDate:selectDate targetDate:self.minDate dateFormat:dateFormat] == NSOrderedAscending;
|
||||||
|
BOOL selectMoreThanMax = [self br_compareDate:selectDate targetDate:self.maxDate dateFormat:dateFormat] == NSOrderedDescending;
|
||||||
|
if (selectLessThanMin) {
|
||||||
|
BRErrorLog(@"默认选择的日期不能小于最小日期!");
|
||||||
|
selectDate = self.minDate;
|
||||||
|
}
|
||||||
|
if (selectMoreThanMax) {
|
||||||
|
BRErrorLog(@"默认选择的日期不能大于最大日期!");
|
||||||
|
selectDate = self.maxDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
return selectDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - NSDate 转 NSString
|
||||||
|
- (NSString *)br_stringFromDate:(NSDate *)date dateFormat:(NSString *)dateFormat {
|
||||||
|
return [NSDate br_stringFromDate:date dateFormat:dateFormat timeZone:self.timeZone language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - NSString 转 NSDate
|
||||||
|
- (NSDate *)br_dateFromString:(NSString *)dateString dateFormat:(NSString *)dateFormat {
|
||||||
|
return [NSDate br_dateFromString:dateString dateFormat:dateFormat timeZone:self.timeZone language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 比较两个日期大小(可以指定比较级数,即按指定格式进行比较)
|
||||||
|
- (NSComparisonResult)br_compareDate:(NSDate *)date targetDate:(NSDate *)targetDate dateFormat:(NSString *)dateFormat {
|
||||||
|
NSString *dateString1 = [self br_stringFromDate:date dateFormat:dateFormat];
|
||||||
|
NSString *dateString2 = [self br_stringFromDate:targetDate dateFormat:dateFormat];
|
||||||
|
NSDate *date1 = [self br_dateFromString:dateString1 dateFormat:dateFormat];
|
||||||
|
NSDate *date2 = [self br_dateFromString:dateString2 dateFormat:dateFormat];
|
||||||
|
if ([date1 compare:date2] == NSOrderedDescending) {
|
||||||
|
return 1; // 大于
|
||||||
|
} else if ([date1 compare:date2] == NSOrderedAscending) {
|
||||||
|
return -1; // 小于
|
||||||
|
} else {
|
||||||
|
return 0; // 等于
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取 yearArr 数组
|
||||||
|
- (NSArray *)getYearArr {
|
||||||
|
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = self.minDate.br_year; i <= self.maxDate.br_year; i++) {
|
||||||
|
[tempArr addObject:[self getYearNumber:i]];
|
||||||
|
}
|
||||||
|
if (self.isDescending) {
|
||||||
|
NSArray *reversedArr = [[tempArr reverseObjectEnumerator] allObjects];
|
||||||
|
tempArr = [reversedArr mutableCopy];
|
||||||
|
}
|
||||||
|
// 判断是否需要添加【自定义字符串】
|
||||||
|
if (self.lastRowContent || self.firstRowContent) {
|
||||||
|
switch (self.pickerMode) {
|
||||||
|
case BRDatePickerModeYMDHMS:
|
||||||
|
case BRDatePickerModeYMDHM:
|
||||||
|
case BRDatePickerModeYMDH:
|
||||||
|
case BRDatePickerModeYMD:
|
||||||
|
case BRDatePickerModeYM:
|
||||||
|
case BRDatePickerModeY:
|
||||||
|
{
|
||||||
|
if (self.lastRowContent) {
|
||||||
|
[tempArr addObject:self.lastRowContent];
|
||||||
|
}
|
||||||
|
if (self.firstRowContent) {
|
||||||
|
[tempArr insertObject:self.firstRowContent atIndex:0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [tempArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取 monthArr 数组
|
||||||
|
- (NSArray *)getMonthArr:(NSInteger)year {
|
||||||
|
NSInteger startMonth = 1;
|
||||||
|
NSInteger endMonth = 12;
|
||||||
|
if (year == self.minDate.br_year) {
|
||||||
|
startMonth = self.minDate.br_month;
|
||||||
|
}
|
||||||
|
if (year == self.maxDate.br_year) {
|
||||||
|
endMonth = self.maxDate.br_month;
|
||||||
|
}
|
||||||
|
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = startMonth; i <= endMonth; i++) {
|
||||||
|
[tempArr addObject:[self getMDHMSNumber:i]];
|
||||||
|
}
|
||||||
|
if (self.isDescending) {
|
||||||
|
NSArray *reversedArr = [[tempArr reverseObjectEnumerator] allObjects];
|
||||||
|
tempArr = [reversedArr mutableCopy];
|
||||||
|
}
|
||||||
|
// 判断是否需要添加【自定义字符串】
|
||||||
|
if (self.lastRowContent || self.firstRowContent) {
|
||||||
|
switch (self.pickerMode) {
|
||||||
|
case BRDatePickerModeMDHM:
|
||||||
|
case BRDatePickerModeMD:
|
||||||
|
{
|
||||||
|
if (self.lastRowContent) {
|
||||||
|
[tempArr addObject:self.lastRowContent];
|
||||||
|
}
|
||||||
|
if (self.firstRowContent) {
|
||||||
|
[tempArr insertObject:self.firstRowContent atIndex:0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [tempArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取 dayArr 数组
|
||||||
|
- (NSArray *)getDayArr:(NSInteger)year month:(NSInteger)month {
|
||||||
|
NSInteger startDay = 1;
|
||||||
|
NSInteger endDay = [NSDate br_getDaysInYear:year month:month];
|
||||||
|
if (year == self.minDate.br_year && month == self.minDate.br_month) {
|
||||||
|
startDay = self.minDate.br_day;
|
||||||
|
}
|
||||||
|
if (year == self.maxDate.br_year && month == self.maxDate.br_month) {
|
||||||
|
endDay = self.maxDate.br_day;
|
||||||
|
}
|
||||||
|
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = startDay; i <= endDay; i++) {
|
||||||
|
[tempArr addObject:[self getMDHMSNumber:i]];
|
||||||
|
}
|
||||||
|
if (self.isDescending) {
|
||||||
|
return [[tempArr reverseObjectEnumerator] allObjects];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [tempArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取 hourArr 数组
|
||||||
|
- (NSArray *)getHourArr:(NSInteger)year month:(NSInteger)month day:(NSInteger)day {
|
||||||
|
if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) {
|
||||||
|
return @[[self getAMText], [self getPMText]];
|
||||||
|
}
|
||||||
|
|
||||||
|
NSInteger startHour = 0;
|
||||||
|
NSInteger endHour = 23;
|
||||||
|
if (year == self.minDate.br_year && month == self.minDate.br_month && day == self.minDate.br_day) {
|
||||||
|
startHour = self.minDate.br_hour;
|
||||||
|
}
|
||||||
|
if (year == self.maxDate.br_year && month == self.maxDate.br_month && day == self.maxDate.br_day) {
|
||||||
|
endHour = self.maxDate.br_hour;
|
||||||
|
}
|
||||||
|
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = startHour; i <= endHour; i++) {
|
||||||
|
[tempArr addObject:[self getMDHMSNumber:i]];
|
||||||
|
}
|
||||||
|
if (self.isDescending) {
|
||||||
|
NSArray *reversedArr = [[tempArr reverseObjectEnumerator] allObjects];
|
||||||
|
tempArr = [reversedArr mutableCopy];
|
||||||
|
}
|
||||||
|
// 判断是否需要添加【自定义字符串】
|
||||||
|
if (self.lastRowContent || self.firstRowContent) {
|
||||||
|
switch (self.pickerMode) {
|
||||||
|
case BRDatePickerModeHMS:
|
||||||
|
case BRDatePickerModeHM:
|
||||||
|
{
|
||||||
|
if (self.lastRowContent) {
|
||||||
|
[tempArr addObject:self.lastRowContent];
|
||||||
|
}
|
||||||
|
if (self.firstRowContent) {
|
||||||
|
[tempArr insertObject:self.firstRowContent atIndex:0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [tempArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取 minuteArr 数组
|
||||||
|
- (NSArray *)getMinuteArr:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour {
|
||||||
|
NSInteger startMinute = 0;
|
||||||
|
NSInteger endMinute = 59;
|
||||||
|
if (year == self.minDate.br_year && month == self.minDate.br_month && day == self.minDate.br_day && hour == self.minDate.br_hour) {
|
||||||
|
startMinute = self.minDate.br_minute;
|
||||||
|
}
|
||||||
|
if (year == self.maxDate.br_year && month == self.maxDate.br_month && day == self.maxDate.br_day && hour == self.maxDate.br_hour) {
|
||||||
|
endMinute = self.maxDate.br_minute;
|
||||||
|
}
|
||||||
|
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = startMinute; i <= endMinute; i += self.minuteInterval) {
|
||||||
|
[tempArr addObject:[self getMDHMSNumber:i]];
|
||||||
|
}
|
||||||
|
if (self.isDescending) {
|
||||||
|
NSArray *reversedArr = [[tempArr reverseObjectEnumerator] allObjects];
|
||||||
|
tempArr = [reversedArr mutableCopy];
|
||||||
|
}
|
||||||
|
// 判断是否需要添加【自定义字符串】
|
||||||
|
if (self.lastRowContent || self.firstRowContent) {
|
||||||
|
switch (self.pickerMode) {
|
||||||
|
case BRDatePickerModeMS:
|
||||||
|
{
|
||||||
|
if (self.lastRowContent) {
|
||||||
|
[tempArr addObject:self.lastRowContent];
|
||||||
|
}
|
||||||
|
if (self.firstRowContent) {
|
||||||
|
[tempArr insertObject:self.firstRowContent atIndex:0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [tempArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取 secondArr 数组
|
||||||
|
- (NSArray *)getSecondArr:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute {
|
||||||
|
NSInteger startSecond = 0;
|
||||||
|
NSInteger endSecond = 59;
|
||||||
|
if (year == self.minDate.br_year && month == self.minDate.br_month && day == self.minDate.br_day && hour == self.minDate.br_hour && minute == self.minDate.br_minute) {
|
||||||
|
startSecond = self.minDate.br_second;
|
||||||
|
}
|
||||||
|
if (year == self.maxDate.br_year && month == self.maxDate.br_month && day == self.maxDate.br_day && hour == self.maxDate.br_hour && minute == self.maxDate.br_minute) {
|
||||||
|
endSecond = self.maxDate.br_second;
|
||||||
|
}
|
||||||
|
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = startSecond; i <= endSecond; i += self.secondInterval) {
|
||||||
|
[tempArr addObject:[self getMDHMSNumber:i]];
|
||||||
|
}
|
||||||
|
if (self.isDescending) {
|
||||||
|
return [[tempArr reverseObjectEnumerator] allObjects];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [tempArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取 monthWeekArr 数组
|
||||||
|
- (NSArray *)getMonthWeekArr:(NSInteger)year month:(NSInteger)month {
|
||||||
|
NSInteger startWeek = 1;
|
||||||
|
NSInteger endWeek = [NSDate br_getWeeksOfMonthInYear:year month:month];
|
||||||
|
if (year == self.minDate.br_year && month == self.minDate.br_month) {
|
||||||
|
startWeek = self.minDate.br_monthWeek;
|
||||||
|
}
|
||||||
|
if (year == self.maxDate.br_year && month == self.maxDate.br_month) {
|
||||||
|
endWeek = self.maxDate.br_monthWeek;
|
||||||
|
}
|
||||||
|
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = startWeek; i <= endWeek; i++) {
|
||||||
|
[tempArr addObject:[self getMDHMSNumber:i]];
|
||||||
|
}
|
||||||
|
if (self.isDescending) {
|
||||||
|
return [[tempArr reverseObjectEnumerator] allObjects];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [tempArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取 yearWeekArr 数组
|
||||||
|
- (NSArray *)getYearWeekArr:(NSInteger)year {
|
||||||
|
NSInteger startWeek = 1;
|
||||||
|
NSInteger endWeek = [NSDate br_getWeeksOfYearInYear:year];
|
||||||
|
if (year == self.minDate.br_year) {
|
||||||
|
startWeek = self.minDate.br_yearWeek;
|
||||||
|
}
|
||||||
|
if (year == self.maxDate.br_year) {
|
||||||
|
endWeek = self.maxDate.br_yearWeek;
|
||||||
|
}
|
||||||
|
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = startWeek; i <= endWeek; i++) {
|
||||||
|
[tempArr addObject:[self getMDHMSNumber:i]];
|
||||||
|
}
|
||||||
|
if (self.isDescending) {
|
||||||
|
return [[tempArr reverseObjectEnumerator] allObjects];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [tempArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取 quarterArr 数组
|
||||||
|
- (NSArray *)getQuarterArr:(NSInteger)year {
|
||||||
|
NSInteger startQuarter = 1;
|
||||||
|
NSInteger endQuarter = [NSDate br_getQuartersInYear:year];
|
||||||
|
if (year == self.minDate.br_year) {
|
||||||
|
startQuarter = self.minDate.br_quarter;
|
||||||
|
}
|
||||||
|
if (year == self.maxDate.br_year) {
|
||||||
|
endQuarter = self.maxDate.br_quarter;
|
||||||
|
}
|
||||||
|
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = startQuarter; i <= endQuarter; i++) {
|
||||||
|
[tempArr addObject:[self getMDHMSNumber:i]];
|
||||||
|
}
|
||||||
|
if (self.isDescending) {
|
||||||
|
return [[tempArr reverseObjectEnumerator] allObjects];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [tempArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 添加 pickerView
|
||||||
|
- (void)setupPickerView:(UIView *)pickerView toView:(UIView *)view {
|
||||||
|
if (view) {
|
||||||
|
// 立即刷新容器视图 view 的布局(防止 view 使用自动布局时,选择器视图无法正常显示)
|
||||||
|
[view setNeedsLayout];
|
||||||
|
[view layoutIfNeeded];
|
||||||
|
|
||||||
|
self.frame = view.bounds;
|
||||||
|
CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
|
||||||
|
CGFloat pickerFooterViewHeight = self.pickerFooterView ? self.pickerFooterView.bounds.size.height : 0;
|
||||||
|
pickerView.frame = CGRectMake(0, pickerHeaderViewHeight, view.bounds.size.width, view.bounds.size.height - pickerHeaderViewHeight - pickerFooterViewHeight);
|
||||||
|
[self addSubview:pickerView];
|
||||||
|
} else {
|
||||||
|
// iOS16:重新设置 pickerView 高度(解决懒加载设置frame不生效问题)
|
||||||
|
CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
|
||||||
|
pickerView.frame = CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight);
|
||||||
|
|
||||||
|
[self.alertView addSubview:pickerView];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取日期单位
|
||||||
|
- (NSArray *)setupPickerUnitLabel:(UIPickerView *)pickerView unitArr:(NSArray *)unitArr {
|
||||||
|
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = 0; i < pickerView.numberOfComponents; i++) {
|
||||||
|
// label宽度
|
||||||
|
CGFloat labelWidth = pickerView.bounds.size.width / pickerView.numberOfComponents;
|
||||||
|
// 根据占位文本长度去计算宽度
|
||||||
|
NSString *tempText = @"00";
|
||||||
|
if (i == 0) {
|
||||||
|
switch (self.pickerMode) {
|
||||||
|
case BRDatePickerModeYMDHMS:
|
||||||
|
case BRDatePickerModeYMDHM:
|
||||||
|
case BRDatePickerModeYMDH:
|
||||||
|
case BRDatePickerModeYMD:
|
||||||
|
case BRDatePickerModeYM:
|
||||||
|
case BRDatePickerModeY:
|
||||||
|
{
|
||||||
|
tempText = @"0123";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 文本宽度
|
||||||
|
CGFloat labelTextWidth = [tempText boundingRectWithSize:CGSizeMake(MAXFLOAT, self.pickerStyle.rowHeight)
|
||||||
|
options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
|
||||||
|
attributes:@{NSFontAttributeName: self.pickerStyle.pickerTextFont}
|
||||||
|
context:nil].size.width;
|
||||||
|
// 单位label
|
||||||
|
UILabel *unitLabel = [[UILabel alloc]init];
|
||||||
|
unitLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;
|
||||||
|
unitLabel.backgroundColor = [UIColor clearColor];
|
||||||
|
if (self.pickerMode != BRDatePickerModeYMDHMS) {
|
||||||
|
unitLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
}
|
||||||
|
unitLabel.font = self.pickerStyle.dateUnitTextFont;
|
||||||
|
unitLabel.textColor = self.pickerStyle.dateUnitTextColor;
|
||||||
|
// 字体自适应属性
|
||||||
|
unitLabel.adjustsFontSizeToFitWidth = YES;
|
||||||
|
// 自适应最小字体缩放比例
|
||||||
|
unitLabel.minimumScaleFactor = 0.5f;
|
||||||
|
unitLabel.text = (unitArr.count > 0 && i < unitArr.count) ? unitArr[i] : nil;
|
||||||
|
|
||||||
|
CGFloat originX = i * labelWidth + labelWidth / 2.0 + labelTextWidth / 2.0 + self.pickerStyle.dateUnitOffsetX;
|
||||||
|
CGFloat originY = (pickerView.frame.size.height - self.pickerStyle.rowHeight) / 2 + self.pickerStyle.dateUnitOffsetY;
|
||||||
|
unitLabel.frame = CGRectMake(originX, originY, MAX(self.pickerStyle.rowHeight, labelTextWidth), self.pickerStyle.rowHeight);
|
||||||
|
|
||||||
|
[tempArr addObject:unitLabel];
|
||||||
|
|
||||||
|
[pickerView addSubview:unitLabel];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [tempArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getYearNumber:(NSInteger)year {
|
||||||
|
NSString *yearString = [NSString stringWithFormat:@"%@", @(year)];
|
||||||
|
if (self.isNumberFullName) {
|
||||||
|
yearString = [NSString stringWithFormat:@"%04d", [yearString intValue]];
|
||||||
|
}
|
||||||
|
return yearString;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getMDHMSNumber:(NSInteger)number {
|
||||||
|
NSString *string = [NSString stringWithFormat:@"%@", @(number)];
|
||||||
|
if (self.isNumberFullName) {
|
||||||
|
string = [NSString stringWithFormat:@"%02d", [string intValue]];
|
||||||
|
}
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getYearText:(NSArray *)yearArr row:(NSInteger)row {
|
||||||
|
NSInteger index = 0;
|
||||||
|
if (row >= 0) {
|
||||||
|
index = MIN(row, yearArr.count - 1);
|
||||||
|
}
|
||||||
|
NSString *yearString = [yearArr objectAtIndex:index];
|
||||||
|
if ((self.lastRowContent && [yearString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [yearString isEqualToString:self.firstRowContent])) {
|
||||||
|
return yearString;
|
||||||
|
}
|
||||||
|
NSString *yearUnit = self.showUnitType == BRShowUnitTypeAll ? [self getYearUnit] : @"";
|
||||||
|
return [NSString stringWithFormat:@"%@%@", yearString, yearUnit];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getMonthText:(NSArray *)monthArr row:(NSInteger)row {
|
||||||
|
NSInteger index = 0;
|
||||||
|
if (row >= 0) {
|
||||||
|
index = MIN(row, monthArr.count - 1);
|
||||||
|
}
|
||||||
|
NSString *monthString = [monthArr objectAtIndex:index];
|
||||||
|
// 首行/末行是自定义字符串,直接返回
|
||||||
|
if ((self.firstRowContent && [monthString isEqualToString:self.firstRowContent]) || (self.lastRowContent && [monthString isEqualToString:self.lastRowContent])) {
|
||||||
|
return monthString;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 自定义月份数据源
|
||||||
|
if (self.monthNames && self.monthNames.count > 0) {
|
||||||
|
NSInteger index = [monthString integerValue] - 1;
|
||||||
|
monthString = (index >= 0 && index < self.monthNames.count) ? self.monthNames[index] : @"";
|
||||||
|
} else {
|
||||||
|
if (![self.pickerStyle.language hasPrefix:@"zh"] && (self.pickerMode == BRDatePickerModeYMD || self.pickerMode == BRDatePickerModeYM || self.pickerMode == BRDatePickerModeYMW)) {
|
||||||
|
// 非中文环境:月份使用系统的月份名称
|
||||||
|
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
||||||
|
dateFormatter.locale = [[NSLocale alloc]initWithLocaleIdentifier:self.pickerStyle.language];
|
||||||
|
// monthSymbols: @[@"January", @"February", @"March", @"April", @"May", @"June", @"July", @"August", @"September", @"October", @"November", @"December"];
|
||||||
|
// shortMonthSymbols: @[@"Jan", @"Feb", @"Mar", @"Apr", @"May", @"Jun", @"Jul", @"Aug", @"Sep", @"Oct", @"Nov", @"Dec"];
|
||||||
|
NSArray *monthNames = self.isShortMonthName ? dateFormatter.shortMonthSymbols : dateFormatter.monthSymbols;
|
||||||
|
NSInteger index = [monthString integerValue] - 1;
|
||||||
|
monthString = (index >= 0 && index < monthNames.count) ? monthNames[index] : @"";
|
||||||
|
} else {
|
||||||
|
// 中文环境:月份显示数字
|
||||||
|
NSString *monthUnit = self.showUnitType == BRShowUnitTypeAll ? [self getMonthUnit] : @"";
|
||||||
|
monthString = [NSString stringWithFormat:@"%@%@", monthString, monthUnit];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return monthString;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getDayText:(NSArray *)dayArr row:(NSInteger)row mSelectDate:(NSDate *)mSelectDate {
|
||||||
|
NSInteger index = 0;
|
||||||
|
if (row >= 0) {
|
||||||
|
index = MIN(row, dayArr.count - 1);
|
||||||
|
}
|
||||||
|
NSString *dayString = [dayArr objectAtIndex:index];
|
||||||
|
if (self.isShowToday && mSelectDate.br_year == [NSDate date].br_year && mSelectDate.br_month == [NSDate date].br_month && [dayString integerValue] == [NSDate date].br_day) {
|
||||||
|
return [NSBundle br_localizedStringForKey:@"今天" language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
NSString *dayUnit = self.showUnitType == BRShowUnitTypeAll ? [self getDayUnit] : @"";
|
||||||
|
dayString = [NSString stringWithFormat:@"%@%@", dayString, dayUnit];
|
||||||
|
if (self.isShowWeek) {
|
||||||
|
NSDate *date = [NSDate br_setYear:mSelectDate.br_year month:mSelectDate.br_month day:[dayString integerValue]];
|
||||||
|
NSString *weekdayString = [NSBundle br_localizedStringForKey:[date br_weekdayString] language:self.pickerStyle.language];
|
||||||
|
dayString = [NSString stringWithFormat:@"%@%@", dayString, weekdayString];
|
||||||
|
}
|
||||||
|
return dayString;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getHourText:(NSArray *)hourArr row:(NSInteger)row {
|
||||||
|
NSInteger index = 0;
|
||||||
|
if (row >= 0) {
|
||||||
|
index = MIN(row, hourArr.count - 1);
|
||||||
|
}
|
||||||
|
NSString *hourString = [hourArr objectAtIndex:index];
|
||||||
|
if ((self.lastRowContent && [hourString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [hourString isEqualToString:self.firstRowContent])) {
|
||||||
|
return hourString;
|
||||||
|
}
|
||||||
|
NSString *hourUnit = self.showUnitType == BRShowUnitTypeAll ? [self getHourUnit] : @"";
|
||||||
|
return [NSString stringWithFormat:@"%@%@", hourString, hourUnit];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getMinuteText:(NSArray *)minuteArr row:(NSInteger)row {
|
||||||
|
NSInteger index = 0;
|
||||||
|
if (row >= 0) {
|
||||||
|
index = MIN(row, minuteArr.count - 1);
|
||||||
|
}
|
||||||
|
NSString *minuteString = [minuteArr objectAtIndex:index];
|
||||||
|
NSString *minuteUnit = self.showUnitType == BRShowUnitTypeAll ? [self getMinuteUnit] : @"";
|
||||||
|
return [NSString stringWithFormat:@"%@%@", minuteString, minuteUnit];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getSecondText:(NSArray *)secondArr row:(NSInteger)row {
|
||||||
|
NSInteger index = 0;
|
||||||
|
if (row >= 0) {
|
||||||
|
index = MIN(row, secondArr.count - 1);
|
||||||
|
}
|
||||||
|
NSString *secondString = [secondArr objectAtIndex:index];
|
||||||
|
NSString *secondUnit = self.showUnitType == BRShowUnitTypeAll ? [self getSecondUnit] : @"";
|
||||||
|
return [NSString stringWithFormat:@"%@%@", secondString, secondUnit];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getWeekText:(NSArray *)weekArr row:(NSInteger)row {
|
||||||
|
NSInteger index = 0;
|
||||||
|
if (row >= 0) {
|
||||||
|
index = MIN(row, weekArr.count - 1);
|
||||||
|
}
|
||||||
|
NSString *weekString = [weekArr objectAtIndex:index];
|
||||||
|
if ((self.lastRowContent && [weekString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [weekString isEqualToString:self.firstRowContent])) {
|
||||||
|
return weekString;
|
||||||
|
}
|
||||||
|
NSString *weekUnit = self.showUnitType == BRShowUnitTypeAll ? [self getWeekUnit] : @"";
|
||||||
|
return [NSString stringWithFormat:@"%@%@", weekString, weekUnit];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getQuarterText:(NSArray *)quarterArr row:(NSInteger)row {
|
||||||
|
NSInteger index = 0;
|
||||||
|
if (row >= 0) {
|
||||||
|
index = MIN(row, quarterArr.count - 1);
|
||||||
|
}
|
||||||
|
NSString *quarterString = [quarterArr objectAtIndex:index];
|
||||||
|
if ((self.lastRowContent && [quarterString isEqualToString:self.lastRowContent]) || (self.firstRowContent && [quarterString isEqualToString:self.firstRowContent])) {
|
||||||
|
return quarterString;
|
||||||
|
}
|
||||||
|
NSString *quarterUnit = self.showUnitType == BRShowUnitTypeAll ? [self getQuarterUnit] : @"";
|
||||||
|
return [NSString stringWithFormat:@"%@%@", quarterString, quarterUnit];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getAMText {
|
||||||
|
return [NSBundle br_localizedStringForKey:@"上午" language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getPMText {
|
||||||
|
return [NSBundle br_localizedStringForKey:@"下午" language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getYearUnit {
|
||||||
|
if (self.customUnit) {
|
||||||
|
return self.customUnit[@"year"] ? : @"";
|
||||||
|
}
|
||||||
|
if (![self.pickerStyle.language hasPrefix:@"zh"]) {
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
return [NSBundle br_localizedStringForKey:@"年" language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getMonthUnit {
|
||||||
|
if (self.customUnit) {
|
||||||
|
return self.customUnit[@"month"] ? : @"";
|
||||||
|
}
|
||||||
|
if (![self.pickerStyle.language hasPrefix:@"zh"]) {
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
return [NSBundle br_localizedStringForKey:@"月" language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getDayUnit {
|
||||||
|
if (self.customUnit) {
|
||||||
|
return self.customUnit[@"day"] ? : @"";
|
||||||
|
}
|
||||||
|
if (![self.pickerStyle.language hasPrefix:@"zh"]) {
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
return [NSBundle br_localizedStringForKey:@"日" language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getHourUnit {
|
||||||
|
if (self.pickerMode == BRDatePickerModeYMDH && self.isShowAMAndPM) {
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
if (self.customUnit) {
|
||||||
|
return self.customUnit[@"hour"] ? : @"";
|
||||||
|
}
|
||||||
|
if (![self.pickerStyle.language hasPrefix:@"zh"]) {
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
return [NSBundle br_localizedStringForKey:@"时" language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getMinuteUnit {
|
||||||
|
if (self.customUnit) {
|
||||||
|
return self.customUnit[@"minute"] ? : @"";
|
||||||
|
}
|
||||||
|
if (![self.pickerStyle.language hasPrefix:@"zh"]) {
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
return [NSBundle br_localizedStringForKey:@"分" language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getSecondUnit {
|
||||||
|
if (self.customUnit) {
|
||||||
|
return self.customUnit[@"second"] ? : @"";
|
||||||
|
}
|
||||||
|
if (![self.pickerStyle.language hasPrefix:@"zh"]) {
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
return [NSBundle br_localizedStringForKey:@"秒" language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getWeekUnit {
|
||||||
|
if (self.customUnit) {
|
||||||
|
return self.customUnit[@"week"] ? : @"";
|
||||||
|
}
|
||||||
|
if (![self.pickerStyle.language hasPrefix:@"zh"]) {
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
return [NSBundle br_localizedStringForKey:@"周" language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString *)getQuarterUnit {
|
||||||
|
if (self.customUnit) {
|
||||||
|
return self.customUnit[@"quarter"] ? : @"";
|
||||||
|
}
|
||||||
|
if (![self.pickerStyle.language hasPrefix:@"zh"]) {
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
return [NSBundle br_localizedStringForKey:@"季度" language:self.pickerStyle.language];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSInteger)getIndexWithArray:(NSArray *)array object:(NSString *)obj {
|
||||||
|
if (!array || array.count == 0 || !obj) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ([array containsObject:obj]) {
|
||||||
|
return [array indexOfObject:obj];
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
274
Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.h
generated
Executable file
274
Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.h
generated
Executable file
@@ -0,0 +1,274 @@
|
|||||||
|
//
|
||||||
|
// BRDatePickerView.h
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2017/8/11.
|
||||||
|
// Copyright © 2017 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "BRBaseView.h"
|
||||||
|
#import "NSDate+BRPickerView.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
/// 日期选择器格式
|
||||||
|
typedef NS_ENUM(NSInteger, BRDatePickerMode) {
|
||||||
|
// ----- 以下4种是系统样式(兼容国际化日期格式) -----
|
||||||
|
/** 【yyyy-MM-dd】UIDatePickerModeDate(美式日期:MM-dd-yyyy;英式日期:dd-MM-yyyy)*/
|
||||||
|
BRDatePickerModeDate,
|
||||||
|
/** 【yyyy-MM-dd HH:mm】 UIDatePickerModeDateAndTime */
|
||||||
|
BRDatePickerModeDateAndTime,
|
||||||
|
/** 【HH:mm】UIDatePickerModeTime */
|
||||||
|
BRDatePickerModeTime,
|
||||||
|
/** 【HH:mm】UIDatePickerModeCountDownTimer */
|
||||||
|
BRDatePickerModeCountDownTimer,
|
||||||
|
|
||||||
|
// ----- 以下14种是自定义样式 -----
|
||||||
|
/** 【yyyy-MM-dd HH:mm:ss】年月日时分秒 */
|
||||||
|
BRDatePickerModeYMDHMS,
|
||||||
|
/** 【yyyy-MM-dd HH:mm】年月日时分 */
|
||||||
|
BRDatePickerModeYMDHM,
|
||||||
|
/** 【yyyy-MM-dd HH】年月日时 */
|
||||||
|
BRDatePickerModeYMDH,
|
||||||
|
/** 【MM-dd HH:mm】月日时分 */
|
||||||
|
BRDatePickerModeMDHM,
|
||||||
|
/** 【yyyy-MM-dd】年月日(兼容国际化日期:dd-MM-yyyy)*/
|
||||||
|
BRDatePickerModeYMD,
|
||||||
|
/** 【yyyy-MM】年月(兼容国际化日期:MM-yyyy)*/
|
||||||
|
BRDatePickerModeYM,
|
||||||
|
/** 【yyyy】年 */
|
||||||
|
BRDatePickerModeY,
|
||||||
|
/** 【MM-dd】月日 */
|
||||||
|
BRDatePickerModeMD,
|
||||||
|
/** 【HH:mm:ss】时分秒 */
|
||||||
|
BRDatePickerModeHMS,
|
||||||
|
/** 【HH:mm】时分 */
|
||||||
|
BRDatePickerModeHM,
|
||||||
|
/** 【mm:ss】分秒 */
|
||||||
|
BRDatePickerModeMS,
|
||||||
|
|
||||||
|
/** 【yyyy-qq】年季度 */
|
||||||
|
BRDatePickerModeYQ,
|
||||||
|
/** 【yyyy-MM-ww】年月周 */
|
||||||
|
BRDatePickerModeYMW,
|
||||||
|
/** 【yyyy-ww】年周 */
|
||||||
|
BRDatePickerModeYW
|
||||||
|
};
|
||||||
|
|
||||||
|
/// 日期单位显示的位置
|
||||||
|
typedef NS_ENUM(NSInteger, BRShowUnitType) {
|
||||||
|
/** 日期单位显示全部行(默认)*/
|
||||||
|
BRShowUnitTypeAll,
|
||||||
|
/** 日期单位仅显示中间行 */
|
||||||
|
BRShowUnitTypeOnlyCenter,
|
||||||
|
/** 日期单位不显示(隐藏日期单位)*/
|
||||||
|
BRShowUnitTypeNone
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef void (^BRDateResultBlock)(NSDate * _Nullable selectDate, NSString * _Nullable selectValue);
|
||||||
|
|
||||||
|
typedef void (^BRDateResultRangeBlock)(NSDate * _Nullable selectStartDate, NSDate * _Nullable selectEndDate, NSString * _Nullable selectValue);
|
||||||
|
|
||||||
|
@interface BRDatePickerView : BRBaseView
|
||||||
|
|
||||||
|
/**
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
///
|
||||||
|
/// 【用法一】
|
||||||
|
/// 特点:灵活,扩展性强(推荐使用!)
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
/** 日期选择器显示类型 */
|
||||||
|
@property (nonatomic, assign) BRDatePickerMode pickerMode;
|
||||||
|
|
||||||
|
/** 设置选中的日期(推荐使用 selectDate) */
|
||||||
|
@property (nullable, nonatomic, strong) NSDate *selectDate;
|
||||||
|
@property (nullable, nonatomic, copy) NSString *selectValue;
|
||||||
|
|
||||||
|
/** 最小日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)*/
|
||||||
|
@property (nullable, nonatomic, strong) NSDate *minDate;
|
||||||
|
/** 最大日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)*/
|
||||||
|
@property (nullable, nonatomic, strong) NSDate *maxDate;
|
||||||
|
|
||||||
|
/** 选择结果的回调 */
|
||||||
|
@property (nullable, nonatomic, copy) BRDateResultBlock resultBlock;
|
||||||
|
/** 选择结果范围的回调:for `BRDatePickerModeYQ`、`BRDatePickerModeYMW`、`BRDatePickerModeYW`, ignored otherwise. */
|
||||||
|
@property (nullable, nonatomic, copy) BRDateResultRangeBlock resultRangeBlock;
|
||||||
|
|
||||||
|
/** 滚动选择时触发的回调 */
|
||||||
|
@property (nullable, nonatomic, copy) BRDateResultBlock changeBlock;
|
||||||
|
/** 滚动选择范围时触发的回调:for `BRDatePickerModeYQ`、`BRDatePickerModeYMW`、`BRDatePickerModeYW`, ignored otherwise. */
|
||||||
|
@property (nullable, nonatomic, copy) BRDateResultRangeBlock changeRangeBlock;
|
||||||
|
|
||||||
|
/** 日期单位显示类型 */
|
||||||
|
@property (nonatomic, assign) BRShowUnitType showUnitType;
|
||||||
|
|
||||||
|
/** 是否显示【星期】,默认为 NO */
|
||||||
|
@property (nonatomic, assign, getter=isShowWeek) BOOL showWeek;
|
||||||
|
|
||||||
|
/** 是否显示【今天】,默认为 NO */
|
||||||
|
@property (nonatomic, assign, getter=isShowToday) BOOL showToday;
|
||||||
|
|
||||||
|
/** 是否添加【至今】,默认为 NO */
|
||||||
|
@property (nonatomic, assign, getter=isAddToNow) BOOL addToNow;
|
||||||
|
|
||||||
|
/** 首行添加【自定义字符串】,配合 selectValue 可设置默认选中 */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *firstRowContent;
|
||||||
|
|
||||||
|
/** 末行添加【自定义字符串】,配合 selectValue 可设置默认选中 */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *lastRowContent;
|
||||||
|
|
||||||
|
/** 最后一行,添加【自定义字符串】 */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *addCustomString DEPRECATED_MSG_ATTRIBUTE("Use 'lastRowContent' instead");
|
||||||
|
|
||||||
|
/** 滚轮上日期数据排序是否降序,默认为 NO(升序)*/
|
||||||
|
@property (nonatomic, assign, getter=isDescending) BOOL descending;
|
||||||
|
|
||||||
|
/** 选择器上数字是否带有前导零,默认为 NO(如:无前导零:2020-1-1;有前导零:2020-01-01)*/
|
||||||
|
@property (nonatomic, assign, getter=isNumberFullName) BOOL numberFullName;
|
||||||
|
|
||||||
|
/** 设置分的时间间隔,默认为1(范围:1 ~ 30)*/
|
||||||
|
@property (nonatomic, assign) NSInteger minuteInterval;
|
||||||
|
|
||||||
|
/** 设置秒的时间间隔,默认为1(范围:1 ~ 30)*/
|
||||||
|
@property (nonatomic, assign) NSInteger secondInterval;
|
||||||
|
|
||||||
|
/** 设置倒计时的时长,默认为0(范围:0 ~ 24*60*60-1,单位为秒) for `BRDatePickerModeCountDownTimer`, ignored otherwise. */
|
||||||
|
@property (nonatomic, assign) NSTimeInterval countDownDuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义月份数据源
|
||||||
|
* 如:@[@"1月", @"2月",..., @"12月"]、 @[@"一月", @"二月",..., @"十二月"]、 @[@"Jan", @"Feb",..., @"Dec"] 等
|
||||||
|
*/
|
||||||
|
@property (nonatomic, copy) NSArray <NSString *> *monthNames;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置国际化日期(非中文环境下)月份是否显示简称,默认为 NO。for `BRDatePickerModeYMD` and `BRDatePickerModeYM`, ignored otherwise.
|
||||||
|
* 如:January 的简称为:Jan
|
||||||
|
*/
|
||||||
|
@property (nonatomic, assign, getter=isShortMonthName) BOOL shortMonthName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义日期单位
|
||||||
|
* 字典格式:@{@"year": @"年", @"month": @"月", @"day": @"日", @"hour": @"时", @"minute": @"分", @"second": @"秒"}
|
||||||
|
*/
|
||||||
|
@property (nonatomic, copy) NSDictionary *customUnit;
|
||||||
|
|
||||||
|
/** 显示上午和下午,默认为 NO. for `BRDatePickerModeYMDH`, ignored otherwise. */
|
||||||
|
@property (nonatomic, assign, getter=isShowAMAndPM) BOOL showAMAndPM;
|
||||||
|
|
||||||
|
/** 设置时区,默认为当前时区 */
|
||||||
|
@property (nullable, nonatomic, copy) NSTimeZone *timeZone;
|
||||||
|
|
||||||
|
/** default is [NSCalendar currentCalendar]. setting nil returns to default. for `UIDatePicker` */
|
||||||
|
@property (nonatomic, copy) NSCalendar *calendar;
|
||||||
|
|
||||||
|
/** 指定不允许选择的日期 */
|
||||||
|
@property (nullable, nonatomic, copy) NSArray <NSDate *> *nonSelectableDates;
|
||||||
|
|
||||||
|
/** 不允许选择日期的回调 */
|
||||||
|
@property (nullable, nonatomic, copy) BRDateResultBlock nonSelectableBlock;
|
||||||
|
|
||||||
|
/// 初始化日期选择器
|
||||||
|
/// @param pickerMode 日期选择器显示类型
|
||||||
|
- (instancetype)initWithPickerMode:(BRDatePickerMode)pickerMode;
|
||||||
|
|
||||||
|
/// 弹出选择器视图
|
||||||
|
- (void)show;
|
||||||
|
|
||||||
|
/// 关闭选择器视图
|
||||||
|
- (void)dismiss;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//================================================= 华丽的分割线 =================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
///
|
||||||
|
/// 【用法二】:快捷使用,直接选择下面其中的一个方法进行使用
|
||||||
|
/// 特点:快捷,方便
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1.显示日期选择器
|
||||||
|
*
|
||||||
|
* @param mode 日期显示类型
|
||||||
|
* @param title 选择器标题
|
||||||
|
* @param selectValue 默认选中的日期(默认选中当前日期)
|
||||||
|
* @param resultBlock 选择结果的回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
+ (void)showDatePickerWithMode:(BRDatePickerMode)mode
|
||||||
|
title:(nullable NSString *)title
|
||||||
|
selectValue:(nullable NSString *)selectValue
|
||||||
|
resultBlock:(nullable BRDateResultBlock)resultBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.显示日期选择器
|
||||||
|
*
|
||||||
|
* @param mode 日期显示类型
|
||||||
|
* @param title 选择器标题
|
||||||
|
* @param selectValue 默认选中的日期(默认选中当前日期)
|
||||||
|
* @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO
|
||||||
|
* @param resultBlock 选择结果的回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
+ (void)showDatePickerWithMode:(BRDatePickerMode)mode
|
||||||
|
title:(nullable NSString *)title
|
||||||
|
selectValue:(nullable NSString *)selectValue
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(nullable BRDateResultBlock)resultBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 3.显示日期选择器
|
||||||
|
*
|
||||||
|
* @param mode 日期显示类型
|
||||||
|
* @param title 选择器标题
|
||||||
|
* @param selectValue 默认选中的日期(默认选中当前日期)
|
||||||
|
* @param minDate 最小日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)
|
||||||
|
* @param maxDate 最大日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)
|
||||||
|
* @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO
|
||||||
|
* @param resultBlock 选择结果的回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
+ (void)showDatePickerWithMode:(BRDatePickerMode)mode
|
||||||
|
title:(nullable NSString *)title
|
||||||
|
selectValue:(nullable NSString *)selectValue
|
||||||
|
minDate:(nullable NSDate *)minDate
|
||||||
|
maxDate:(nullable NSDate *)maxDate
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(nullable BRDateResultBlock)resultBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 3.显示日期选择器
|
||||||
|
*
|
||||||
|
* @param mode 日期显示类型
|
||||||
|
* @param title 选择器标题
|
||||||
|
* @param selectValue 默认选中的日期(默认选中当前日期)
|
||||||
|
* @param minDate 最小日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)
|
||||||
|
* @param maxDate 最大日期(可使用 NSDate+BRPickerView 分类中对应的方法进行创建)
|
||||||
|
* @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO
|
||||||
|
* @param resultBlock 选择结果的回调
|
||||||
|
* @param resultRangeBlock 范围选择结果的回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
+ (void)showDatePickerWithMode:(BRDatePickerMode)mode
|
||||||
|
title:(nullable NSString *)title
|
||||||
|
selectValue:(nullable NSString *)selectValue
|
||||||
|
minDate:(nullable NSDate *)minDate
|
||||||
|
maxDate:(nullable NSDate *)maxDate
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(nullable BRDateResultBlock)resultBlock
|
||||||
|
resultRangeBlock:(nullable BRDateResultRangeBlock)resultRangeBlock;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
1965
Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.m
generated
Executable file
1965
Pods/BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.m
generated
Executable file
File diff suppressed because it is too large
Load Diff
126
Pods/BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.h
generated
Normal file
126
Pods/BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.h
generated
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
//
|
||||||
|
// NSDate+BRPickerView.h
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2018/3/15.
|
||||||
|
// Copyright © 2018 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface NSDate (BRPickerView)
|
||||||
|
/// 获取指定date的详细信息
|
||||||
|
@property (readonly) NSInteger br_year; // 年
|
||||||
|
@property (readonly) NSInteger br_month; // 月
|
||||||
|
@property (readonly) NSInteger br_day; // 日
|
||||||
|
@property (readonly) NSInteger br_hour; // 时
|
||||||
|
@property (readonly) NSInteger br_minute; // 分
|
||||||
|
@property (readonly) NSInteger br_second; // 秒
|
||||||
|
@property (readonly) NSInteger br_weekday; // 星期
|
||||||
|
@property (readonly) NSInteger br_monthWeek; // 月周
|
||||||
|
@property (readonly) NSInteger br_yearWeek; // 年周
|
||||||
|
@property (readonly) NSInteger br_quarter; // 季度
|
||||||
|
|
||||||
|
/** 获取中文星期字符串 */
|
||||||
|
@property (nullable, nonatomic, readonly, copy) NSString *br_weekdayString;
|
||||||
|
|
||||||
|
/** 获取日历单例对象 */
|
||||||
|
+ (NSCalendar *)br_calendar;
|
||||||
|
|
||||||
|
|
||||||
|
/// ---------------- 创建 date ----------------
|
||||||
|
/** 通过 NSDateComponents对象 来创建 NSDate对象(可以设置时区) */
|
||||||
|
+ (nullable NSDate *)br_setDateFromComponents:(NSDateComponents *)components timeZone:(NSTimeZone *)timeZone;
|
||||||
|
|
||||||
|
/** yyyy */
|
||||||
|
+ (nullable NSDate *)br_setYear:(NSInteger)year;
|
||||||
|
|
||||||
|
/** yyyy-MM */
|
||||||
|
+ (nullable NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month;
|
||||||
|
|
||||||
|
/** yyyy-MM-dd */
|
||||||
|
+ (nullable NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day;
|
||||||
|
|
||||||
|
/** yyyy-MM-dd HH */
|
||||||
|
+ (nullable NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour;
|
||||||
|
|
||||||
|
/** yyyy-MM-dd HH:mm */
|
||||||
|
+ (nullable NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute;
|
||||||
|
|
||||||
|
/** yyyy-MM-dd HH:mm:ss */
|
||||||
|
+ (nullable NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute second:(NSInteger)second;
|
||||||
|
|
||||||
|
/** MM-dd HH:mm */
|
||||||
|
+ (nullable NSDate *)br_setMonth:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute;
|
||||||
|
|
||||||
|
/** MM-dd */
|
||||||
|
+ (nullable NSDate *)br_setMonth:(NSInteger)month day:(NSInteger)day;
|
||||||
|
|
||||||
|
/** HH:mm:ss */
|
||||||
|
+ (nullable NSDate *)br_setHour:(NSInteger)hour minute:(NSInteger)minute second:(NSInteger)second;
|
||||||
|
|
||||||
|
/** HH:mm */
|
||||||
|
+ (nullable NSDate *)br_setHour:(NSInteger)hour minute:(NSInteger)minute;
|
||||||
|
|
||||||
|
/** mm:ss */
|
||||||
|
+ (nullable NSDate *)br_setMinute:(NSInteger)minute second:(NSInteger)second;
|
||||||
|
|
||||||
|
/** yyyy-MM-ww */
|
||||||
|
+ (nullable NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month weekOfMonth:(NSInteger)weekOfMont;
|
||||||
|
|
||||||
|
/** yyyy-ww */
|
||||||
|
+ (nullable NSDate *)br_setYear:(NSInteger)year weekOfYear:(NSInteger)weekOfYear;
|
||||||
|
|
||||||
|
/** yyyy-qq */
|
||||||
|
+ (nullable NSDate *)br_setYear:(NSInteger)year quarter:(NSInteger)quarter;
|
||||||
|
|
||||||
|
|
||||||
|
/** 获取某个月的天数(通过年月求每月天数)*/
|
||||||
|
+ (NSUInteger)br_getDaysInYear:(NSInteger)year month:(NSInteger)month;
|
||||||
|
|
||||||
|
/** 获取某个月的周数(通过年月求该月周数)*/
|
||||||
|
+ (NSUInteger)br_getWeeksOfMonthInYear:(NSInteger)year month:(NSInteger)month;
|
||||||
|
|
||||||
|
/** 获取某一年的周数(通过年求该年周数)*/
|
||||||
|
+ (NSUInteger)br_getWeeksOfYearInYear:(NSInteger)year;
|
||||||
|
|
||||||
|
/** 获取某一年的季度数(通过年求该年季度数)*/
|
||||||
|
+ (NSUInteger)br_getQuartersInYear:(NSInteger)year;
|
||||||
|
|
||||||
|
/** 获取 日期加上/减去某天数后的新日期 */
|
||||||
|
- (nullable NSDate *)br_getNewDateToDays:(NSTimeInterval)days;
|
||||||
|
|
||||||
|
/** 获取 日期加上/减去某个月数后的新日期 */
|
||||||
|
- (nullable NSDate *)br_getNewDateToMonths:(NSTimeInterval)months;
|
||||||
|
|
||||||
|
/** NSDate 转 NSString */
|
||||||
|
+ (nullable NSString *)br_stringFromDate:(NSDate *)date dateFormat:(NSString *)dateFormat;
|
||||||
|
/** NSDate 转 NSString */
|
||||||
|
+ (nullable NSString *)br_stringFromDate:(NSDate *)date
|
||||||
|
dateFormat:(NSString *)dateFormat
|
||||||
|
timeZone:(nullable NSTimeZone *)timeZone
|
||||||
|
language:(nullable NSString *)language;
|
||||||
|
|
||||||
|
|
||||||
|
/** NSString 转 NSDate */
|
||||||
|
+ (nullable NSDate *)br_dateFromString:(NSString *)dateString dateFormat:(NSString *)dateFormat;
|
||||||
|
/** NSString 转 NSDate */
|
||||||
|
+ (nullable NSDate *)br_dateFromString:(NSString *)dateString
|
||||||
|
dateFormat:(NSString *)dateFormat
|
||||||
|
timeZone:(nullable NSTimeZone *)timeZone
|
||||||
|
language:(nullable NSString *)language;
|
||||||
|
|
||||||
|
|
||||||
|
/** NSDate 转 NSString(已弃用) */
|
||||||
|
+ (nullable NSString *)br_getDateString:(NSDate *)date format:(NSString *)format DEPRECATED_MSG_ATTRIBUTE("Use 'br_stringFromDate:dateFormat:' instead");
|
||||||
|
|
||||||
|
/** NSString 转 NSDate(已弃用) */
|
||||||
|
+ (nullable NSDate *)br_getDate:(NSString *)dateString format:(NSString *)format DEPRECATED_MSG_ATTRIBUTE("Use 'br_dateFromString:dateFormat:' instead");
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
400
Pods/BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.m
generated
Normal file
400
Pods/BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.m
generated
Normal file
@@ -0,0 +1,400 @@
|
|||||||
|
//
|
||||||
|
// NSDate+BRPickerView.m
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2018/3/15.
|
||||||
|
// Copyright © 2018 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "NSDate+BRPickerView.h"
|
||||||
|
#import "BRPickerViewMacro.h"
|
||||||
|
|
||||||
|
BRSYNTH_DUMMY_CLASS(NSDate_BRPickerView)
|
||||||
|
|
||||||
|
static const NSCalendarUnit unitFlags = (NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekOfYear | NSCalendarUnitWeekOfMonth | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal | NSCalendarUnitQuarter);
|
||||||
|
|
||||||
|
@implementation NSDate (BRPickerView)
|
||||||
|
|
||||||
|
#pragma mark - 获取日历单例对象
|
||||||
|
+ (NSCalendar *)br_calendar {
|
||||||
|
static NSCalendar *sharedCalendar = nil;
|
||||||
|
if (!sharedCalendar) {
|
||||||
|
// 创建日历对象,指定日历的算法(公历/阳历)
|
||||||
|
sharedCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||||||
|
// NSCalendar 设置时区
|
||||||
|
//sharedCalendar.timeZone = [NSTimeZone timeZoneWithName:@"America/Chicago"];
|
||||||
|
}
|
||||||
|
return sharedCalendar;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - NSDate 转 NSDateComponents
|
||||||
|
+ (NSDateComponents *)br_componentsFromDate:(NSDate *)date {
|
||||||
|
// 通过日历类 NSCalendar 进行转换
|
||||||
|
NSCalendar *calendar = [self br_calendar];
|
||||||
|
// NSDateComponents 可以获得日期的详细信息,即日期的组成
|
||||||
|
return [calendar components:unitFlags fromDate:date];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - NSDateComponents 转 NSDate
|
||||||
|
+ (NSDate *)br_dateFromComponents:(NSDateComponents *)components {
|
||||||
|
// 通过日历类 NSCalendar 进行转换
|
||||||
|
NSCalendar *calendar = [self br_calendar];
|
||||||
|
return [calendar dateFromComponents:components];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取指定日期的年份
|
||||||
|
- (NSInteger)br_year {
|
||||||
|
return [NSDate br_componentsFromDate:self].year;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取指定日期的月份
|
||||||
|
- (NSInteger)br_month {
|
||||||
|
return [NSDate br_componentsFromDate:self].month;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取指定日期的天
|
||||||
|
- (NSInteger)br_day {
|
||||||
|
return [NSDate br_componentsFromDate:self].day;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取指定日期的小时
|
||||||
|
- (NSInteger)br_hour {
|
||||||
|
return [NSDate br_componentsFromDate:self].hour;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取指定日期的分钟
|
||||||
|
- (NSInteger)br_minute {
|
||||||
|
return [NSDate br_componentsFromDate:self].minute;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取指定日期的秒
|
||||||
|
- (NSInteger)br_second {
|
||||||
|
return [NSDate br_componentsFromDate:self].second;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取指定日期的星期
|
||||||
|
- (NSInteger)br_weekday {
|
||||||
|
return [NSDate br_componentsFromDate:self].weekday;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取指定日期的月周
|
||||||
|
- (NSInteger)br_monthWeek {
|
||||||
|
return [NSDate br_componentsFromDate:self].weekOfMonth;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取指定日期的年周
|
||||||
|
- (NSInteger)br_yearWeek {
|
||||||
|
return [NSDate br_componentsFromDate:self].weekOfYear;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取指定日期的季度
|
||||||
|
- (NSInteger)br_quarter {
|
||||||
|
// [NSDate br_componentsFromDate:self].quarter; // 取到的季度值总是0?
|
||||||
|
NSInteger quarter = 1;
|
||||||
|
NSInteger month = self.br_month;
|
||||||
|
if (month > 3) quarter = 2;
|
||||||
|
if (month > 6) quarter = 3;
|
||||||
|
if (month > 9) quarter = 4;
|
||||||
|
|
||||||
|
return quarter;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取指定日期的星期
|
||||||
|
- (NSString *)br_weekdayString {
|
||||||
|
switch (self.br_weekday - 1) {
|
||||||
|
case 0:
|
||||||
|
{
|
||||||
|
return @"周日";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
return @"周一";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
return @"周二";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
return @"周三";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
return @"周四";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
return @"周五";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
{
|
||||||
|
return @"周六";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ---------------- 创建 date ----------------
|
||||||
|
#pragma mark - 通过 NSDateComponents对象 来创建 NSDate对象(可以设置时区)
|
||||||
|
+ (nullable NSDate *)br_setDateFromComponents:(NSDateComponents *)components timeZone:(NSTimeZone *)timeZone {
|
||||||
|
// 创建日历对象,指定日历的算法(公历/阳历)
|
||||||
|
NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||||||
|
if (timeZone) {
|
||||||
|
// NSCalendar 设置时区
|
||||||
|
calendar.timeZone = timeZone;
|
||||||
|
}
|
||||||
|
return [calendar dateFromComponents:components];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 创建date(通过 NSCalendar 类来创建日期)
|
||||||
|
+ (NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute second:(NSInteger)second {
|
||||||
|
return [self br_setYear:year month:month day:day hour:hour minute:minute second:second weekOfMonth:0 weekOfYear:0 quarter:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day
|
||||||
|
hour:(NSInteger)hour minute:(NSInteger)minute second:(NSInteger)second
|
||||||
|
weekOfMonth:(NSInteger)weekOfMonth weekOfYear:(NSInteger)weekOfYear quarter:(NSInteger)quarter {
|
||||||
|
NSDateComponents *components = [self br_componentsFromDate:[NSDate date]];
|
||||||
|
if (year > 0) {
|
||||||
|
// 初始化日期组件
|
||||||
|
components = [[NSDateComponents alloc]init];
|
||||||
|
components.year = year;
|
||||||
|
}
|
||||||
|
if (month > 0) {
|
||||||
|
components.month = month;
|
||||||
|
}
|
||||||
|
if (day > 0) {
|
||||||
|
components.day = day;
|
||||||
|
}
|
||||||
|
if (hour >= 0) {
|
||||||
|
components.hour = hour;
|
||||||
|
}
|
||||||
|
if (minute >= 0) {
|
||||||
|
components.minute = minute;
|
||||||
|
}
|
||||||
|
if (second >= 0) {
|
||||||
|
components.second = second;
|
||||||
|
}
|
||||||
|
if (weekOfMonth > 0) {
|
||||||
|
components.weekOfMonth = weekOfMonth;
|
||||||
|
}
|
||||||
|
if (weekOfYear > 0) {
|
||||||
|
components.weekOfYear = weekOfYear;
|
||||||
|
}
|
||||||
|
if (quarter > 0) {
|
||||||
|
components.quarter = quarter;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [self br_dateFromComponents:components];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute {
|
||||||
|
return [self br_setYear:year month:month day:day hour:hour minute:minute second:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour {
|
||||||
|
return [self br_setYear:year month:month day:day hour:hour minute:0 second:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day {
|
||||||
|
return [self br_setYear:year month:month day:day hour:0 minute:0 second:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month {
|
||||||
|
return [self br_setYear:year month:month day:0 hour:0 minute:0 second:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setYear:(NSInteger)year {
|
||||||
|
return [self br_setYear:year month:0 day:0 hour:0 minute:0 second:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setMonth:(NSInteger)month day:(NSInteger)day hour:(NSInteger)hour minute:(NSInteger)minute {
|
||||||
|
return [self br_setYear:0 month:month day:day hour:hour minute:minute second:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setMonth:(NSInteger)month day:(NSInteger)day {
|
||||||
|
return [self br_setYear:0 month:month day:day hour:0 minute:0 second:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setHour:(NSInteger)hour minute:(NSInteger)minute second:(NSInteger)second {
|
||||||
|
return [self br_setYear:0 month:0 day:0 hour:hour minute:minute second:second];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setHour:(NSInteger)hour minute:(NSInteger)minute {
|
||||||
|
return [self br_setYear:0 month:0 day:0 hour:hour minute:minute second:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setMinute:(NSInteger)minute second:(NSInteger)second {
|
||||||
|
return [self br_setYear:0 month:0 day:0 hour:0 minute:minute second:second];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setYear:(NSInteger)year month:(NSInteger)month weekOfMonth:(NSInteger)weekOfMonth {
|
||||||
|
return [self br_setYear:year month:month day:0 hour:0 minute:0 second:0 weekOfMonth:weekOfMonth weekOfYear:0 quarter:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setYear:(NSInteger)year weekOfYear:(NSInteger)weekOfYear {
|
||||||
|
return [self br_setYear:year month:0 day:0 hour:0 minute:0 second:0 weekOfMonth:0 weekOfYear:weekOfYear quarter:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSDate *)br_setYear:(NSInteger)year quarter:(NSInteger)quarter {
|
||||||
|
return [self br_setYear:year month:0 day:0 hour:0 minute:0 second:0 weekOfMonth:0 weekOfYear:0 quarter:quarter];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取某个月的天数(通过年月求每月天数)
|
||||||
|
+ (NSUInteger)br_getDaysInYear:(NSInteger)year month:(NSInteger)month {
|
||||||
|
BOOL isLeapYear = year % 4 == 0 ? (year % 100 == 0 ? (year % 400 == 0 ? YES : NO) : YES) : NO;
|
||||||
|
switch (month) {
|
||||||
|
case 1:
|
||||||
|
case 3:
|
||||||
|
case 5:
|
||||||
|
case 7:
|
||||||
|
case 8:
|
||||||
|
case 10:
|
||||||
|
case 12:
|
||||||
|
{
|
||||||
|
return 31;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
case 6:
|
||||||
|
case 9:
|
||||||
|
case 11:
|
||||||
|
{
|
||||||
|
return 30;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
if (isLeapYear) {
|
||||||
|
return 29;
|
||||||
|
} else {
|
||||||
|
return 28;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取某个月的周数(通过年月求该月周数)
|
||||||
|
+ (NSUInteger)br_getWeeksOfMonthInYear:(NSInteger)year month:(NSInteger)month {
|
||||||
|
NSUInteger lastDayOfMonth = [self br_getDaysInYear:year month:month];
|
||||||
|
NSDate *endDate = [self br_setYear:year month:month day:lastDayOfMonth];
|
||||||
|
return endDate.br_monthWeek;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取某一年的周数(通过年求该年周数)
|
||||||
|
+ (NSUInteger)br_getWeeksOfYearInYear:(NSInteger)year {
|
||||||
|
NSDate *endDate = [self br_setYear:year month:12 day:31];
|
||||||
|
NSInteger weeks = endDate.br_yearWeek;
|
||||||
|
if (weeks == 1) weeks = 52;
|
||||||
|
return weeks;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取某一年的季度数(通过年求该年季度数)
|
||||||
|
+ (NSUInteger)br_getQuartersInYear:(NSInteger)year {
|
||||||
|
NSDate *endDate = [self br_setYear:year month:12 day:31];
|
||||||
|
return endDate.br_quarter;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取 日期加上/减去某天数后的新日期
|
||||||
|
- (NSDate *)br_getNewDateToDays:(NSTimeInterval)days {
|
||||||
|
// days 为正数时,表示几天之后的日期;负数表示几天之前的日期
|
||||||
|
return [self dateByAddingTimeInterval:60 * 60 * 24 * days];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取 日期加上/减去某个月数后的新日期
|
||||||
|
- (nullable NSDate *)br_getNewDateToMonths:(NSTimeInterval)months {
|
||||||
|
// months 为正数时,表示几个月之后的日期;负数表示几个月之前的日期
|
||||||
|
NSDateComponents *components = [[NSDateComponents alloc] init];
|
||||||
|
[components setMonth:months];
|
||||||
|
NSCalendar *calender = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
|
||||||
|
return [calender dateByAddingComponents:components toDate:self options:0];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - NSDate 转 NSString
|
||||||
|
+ (NSString *)br_stringFromDate:(NSDate *)date dateFormat:(NSString *)dateFormat {
|
||||||
|
return [self br_stringFromDate:date dateFormat:dateFormat timeZone:nil language:nil];
|
||||||
|
}
|
||||||
|
#pragma mark - NSDate 转 NSString
|
||||||
|
+ (NSString *)br_stringFromDate:(NSDate *)date
|
||||||
|
dateFormat:(NSString *)dateFormat
|
||||||
|
timeZone:(NSTimeZone *)timeZone
|
||||||
|
language:(NSString *)language {
|
||||||
|
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
||||||
|
// 设置日期格式
|
||||||
|
dateFormatter.dateFormat = dateFormat;
|
||||||
|
// NSDateFormatter 设置时区 ,不设置默认为系统时区
|
||||||
|
if (timeZone) {
|
||||||
|
dateFormatter.timeZone = timeZone;
|
||||||
|
}
|
||||||
|
if (!language) {
|
||||||
|
language = [NSLocale preferredLanguages].firstObject;
|
||||||
|
}
|
||||||
|
dateFormatter.locale = [[NSLocale alloc]initWithLocaleIdentifier:language];
|
||||||
|
NSString *dateString = [dateFormatter stringFromDate:date];
|
||||||
|
|
||||||
|
return dateString;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - NSString 转 NSDate
|
||||||
|
+ (NSDate *)br_dateFromString:(NSString *)dateString dateFormat:(NSString *)dateFormat {
|
||||||
|
return [self br_dateFromString:dateString dateFormat:dateFormat timeZone:nil language:nil];
|
||||||
|
}
|
||||||
|
#pragma mark - NSString 转 NSDate
|
||||||
|
+ (NSDate *)br_dateFromString:(NSString *)dateString
|
||||||
|
dateFormat:(NSString *)dateFormat
|
||||||
|
timeZone:(NSTimeZone *)timeZone
|
||||||
|
language:(NSString *)language {
|
||||||
|
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
|
||||||
|
// 设置日期格式
|
||||||
|
dateFormatter.dateFormat = dateFormat;
|
||||||
|
// 设置时区
|
||||||
|
if (!timeZone) {
|
||||||
|
timeZone = [self currentTimeZone];
|
||||||
|
}
|
||||||
|
if (!language) {
|
||||||
|
language = [NSLocale preferredLanguages].firstObject;
|
||||||
|
}
|
||||||
|
dateFormatter.timeZone = timeZone;
|
||||||
|
dateFormatter.locale = [[NSLocale alloc]initWithLocaleIdentifier:language];
|
||||||
|
// 如果当前时间不存在,就获取距离最近的整点时间
|
||||||
|
dateFormatter.lenient = YES;
|
||||||
|
|
||||||
|
return [dateFormatter dateFromString:dateString];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取当前时区(不使用夏时制)
|
||||||
|
+ (NSTimeZone *)currentTimeZone {
|
||||||
|
// 当前时区
|
||||||
|
NSTimeZone *localTimeZone = [NSTimeZone localTimeZone];
|
||||||
|
// 当前时区相对于GMT(零时区)的偏移秒数
|
||||||
|
NSInteger interval = [localTimeZone secondsFromGMTForDate:[NSDate date]];
|
||||||
|
// 当前时区(不使用夏时制):由偏移量获得对应的NSTimeZone对象
|
||||||
|
// 注意:一些夏令时时间 NSString 转 NSDate 时,默认会导致 NSDateFormatter 格式化失败,返回 null
|
||||||
|
return [NSTimeZone timeZoneForSecondsFromGMT:interval];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - NSDate 转 NSString(已弃用)
|
||||||
|
+ (NSString *)br_getDateString:(NSDate *)date format:(NSString *)format {
|
||||||
|
return [self br_stringFromDate:date dateFormat:format];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - NSString 转 NSDate(已弃用)
|
||||||
|
+ (NSDate *)br_getDate:(NSString *)dateString format:(NSString *)format {
|
||||||
|
return [self br_dateFromString:dateString dateFormat:format];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
37
Pods/BRPickerView/BRPickerView/StringPickerView/BRResultModel.h
generated
Normal file
37
Pods/BRPickerView/BRPickerView/StringPickerView/BRResultModel.h
generated
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
//
|
||||||
|
// BRResultModel.h
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2019/10/2.
|
||||||
|
// Copyright © 2019 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface BRResultModel : NSObject
|
||||||
|
|
||||||
|
/** key */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *key;
|
||||||
|
/** value */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *value;
|
||||||
|
/** 父级key(提示:联动时第一级数据,parentKey设置为:@"-1") */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *parentKey;
|
||||||
|
/** 父级value */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *parentValue;
|
||||||
|
/** 级别 */
|
||||||
|
@property (nullable, nonatomic, copy) NSString *level;
|
||||||
|
/** 子级list */
|
||||||
|
@property (nullable, nonatomic, copy) NSArray<BRResultModel *> *children;
|
||||||
|
/** 记录选择的索引位置 */
|
||||||
|
@property (nonatomic, assign) NSInteger index;
|
||||||
|
|
||||||
|
/// 其它扩展字段
|
||||||
|
@property (nullable, nonatomic, strong) id extras;
|
||||||
|
@property (nullable, nonatomic, copy) NSString *remark;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
41
Pods/BRPickerView/BRPickerView/StringPickerView/BRResultModel.m
generated
Normal file
41
Pods/BRPickerView/BRPickerView/StringPickerView/BRResultModel.m
generated
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
//
|
||||||
|
// BRResultModel.m
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2019/10/2.
|
||||||
|
// Copyright © 2019 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "BRResultModel.h"
|
||||||
|
|
||||||
|
@implementation BRResultModel
|
||||||
|
|
||||||
|
/// 判断两个对象是否相等
|
||||||
|
/// @param object 目标对象
|
||||||
|
- (BOOL)isEqual:(id)object {
|
||||||
|
// 1.对象的地址相同
|
||||||
|
if (self == object) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (![object isKindOfClass:[BRResultModel class]]) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
BRResultModel *model = (BRResultModel *)object;
|
||||||
|
if (!model) {
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
// 2.对象的类型相同,且对象的各个属性相等
|
||||||
|
BOOL isSameKey = (!self.key && !model.key) || [self.key isEqualToString:model.key];
|
||||||
|
BOOL isSameValue = (!self.value && !model.value) || [self.value isEqualToString:model.value];
|
||||||
|
|
||||||
|
return isSameKey && isSameValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSUInteger)hash {
|
||||||
|
return [self.key hash] ^ [self.value hash];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
191
Pods/BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.h
generated
Executable file
191
Pods/BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.h
generated
Executable file
@@ -0,0 +1,191 @@
|
|||||||
|
//
|
||||||
|
// BRStringPickerView.h
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2017/8/11.
|
||||||
|
// Copyright © 2017 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "BRBaseView.h"
|
||||||
|
#import "BRResultModel.h"
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
/// 字符串选择器类型
|
||||||
|
typedef NS_ENUM(NSInteger, BRStringPickerMode) {
|
||||||
|
/** 单列选择器 */
|
||||||
|
BRStringPickerComponentSingle,
|
||||||
|
/** 多列选择器 */
|
||||||
|
BRStringPickerComponentMulti,
|
||||||
|
/** 多级联动选择器 */
|
||||||
|
BRStringPickerComponentLinkage
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef void(^BRStringResultModelBlock)(BRResultModel * _Nullable resultModel);
|
||||||
|
|
||||||
|
typedef void(^BRStringResultModelArrayBlock)(NSArray <BRResultModel *> * _Nullable resultModelArr);
|
||||||
|
|
||||||
|
@interface BRStringPickerView : BRBaseView
|
||||||
|
|
||||||
|
/**
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
///
|
||||||
|
/// 【用法一】
|
||||||
|
/// 特点:灵活,扩展性强(推荐使用!)
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
/** 字符串选择器显示类型 */
|
||||||
|
@property (nonatomic, assign) BRStringPickerMode pickerMode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1.设置数据源
|
||||||
|
* 单列:@[@"男", @"女", @"其他"],或直接传一维模型数组(NSArray <BRResultModel *>*)
|
||||||
|
* 多列:@[@[@"语文", @"数学", @"英语"], @[@"优秀", @"良好"]],或直接传多维模型数组
|
||||||
|
* 联动:直接传一维模型数组(NSArray <BRResultModel *>*),要注意数据源联动格式,可参考Demo
|
||||||
|
*/
|
||||||
|
@property (nullable, nonatomic, copy) NSArray *dataSourceArr;
|
||||||
|
/**
|
||||||
|
* 2.设置数据源
|
||||||
|
* 直接传plist文件名:NSString类型(如:@"test.plist"),要带后缀名
|
||||||
|
* 场景:可以将数据源数据(数组类型)放到plist文件中,直接传plist文件名更加简单
|
||||||
|
*/
|
||||||
|
@property (nullable, nonatomic, copy) NSString *plistName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置默认选中的位置【单列】
|
||||||
|
* 推荐使用 selectIndex,更加严谨,可以避免使用 selectValue 时,有名称相同的情况
|
||||||
|
*/
|
||||||
|
@property (nonatomic, assign) NSInteger selectIndex;
|
||||||
|
@property (nullable, nonatomic, copy) NSString *selectValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置默认选中的位置【多列】
|
||||||
|
* 推荐使用 selectIndexs,更加严谨,可以避免使用 selectValues 时,有名称相同的情况
|
||||||
|
*/
|
||||||
|
@property (nullable, nonatomic, copy) NSArray <NSNumber *> *selectIndexs;
|
||||||
|
@property (nullable, nonatomic, copy) NSArray <NSString *> *selectValues;
|
||||||
|
|
||||||
|
/** 选择结果的回调【单列】 */
|
||||||
|
@property (nullable, nonatomic, copy) BRStringResultModelBlock resultModelBlock;
|
||||||
|
/** 选择结果的回调【多列】 */
|
||||||
|
@property (nullable, nonatomic, copy) BRStringResultModelArrayBlock resultModelArrayBlock;
|
||||||
|
|
||||||
|
/** 滚动选择时触发的回调【单列】 */
|
||||||
|
@property (nullable, nonatomic, copy) BRStringResultModelBlock changeModelBlock;
|
||||||
|
/** 滚动选择时触发的回调【多列】 */
|
||||||
|
@property (nullable, nonatomic, copy) BRStringResultModelArrayBlock changeModelArrayBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最大层级数(列数) for `BRStringPickerComponentLinkage`, ignored otherwise.
|
||||||
|
* 使用场景:默认可选,当数据源中有 key 等于 parentKey 情况时,必须要设置
|
||||||
|
*/
|
||||||
|
@property (nonatomic, assign) NSInteger numberOfComponents;
|
||||||
|
|
||||||
|
/// 初始化字符串选择器
|
||||||
|
/// @param pickerMode 字符串选择器显示类型
|
||||||
|
- (instancetype)initWithPickerMode:(BRStringPickerMode)pickerMode;
|
||||||
|
|
||||||
|
/// 弹出选择器视图
|
||||||
|
- (void)show;
|
||||||
|
|
||||||
|
/// 关闭选择器视图
|
||||||
|
- (void)dismiss;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//================================================= 华丽的分割线 =================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
///
|
||||||
|
/// 【用法二】:快捷使用,直接选择下面其中的一个方法进行使用
|
||||||
|
/// 特点:快捷,方便
|
||||||
|
///
|
||||||
|
////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1.显示【单列】选择器
|
||||||
|
*
|
||||||
|
* @param title 选择器标题
|
||||||
|
* @param dataSourceArr 数据源,格式:@[@"男", @"女", @"其他"],或直接传一维模型数组(NSArray <BRResultModel *>*)
|
||||||
|
* @param selectIndex 默认选中的位置
|
||||||
|
* @param resultBlock 选择后的回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
+ (void)showPickerWithTitle:(nullable NSString *)title
|
||||||
|
dataSourceArr:(nullable NSArray *)dataSourceArr
|
||||||
|
selectIndex:(NSInteger)selectIndex
|
||||||
|
resultBlock:(nullable BRStringResultModelBlock)resultBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.显示【单列】选择器
|
||||||
|
*
|
||||||
|
* @param title 选择器标题
|
||||||
|
* @param dataSourceArr 数据源(如:@[@"男", @"女", @"其他"],或直接传模型数组)
|
||||||
|
* @param selectIndex 默认选中的位置
|
||||||
|
* @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO
|
||||||
|
* @param resultBlock 选择后的回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
+ (void)showPickerWithTitle:(nullable NSString *)title
|
||||||
|
dataSourceArr:(nullable NSArray *)dataSourceArr
|
||||||
|
selectIndex:(NSInteger)selectIndex
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(nullable BRStringResultModelBlock)resultBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 3.显示【多列】选择器
|
||||||
|
*
|
||||||
|
* @param title 选择器标题
|
||||||
|
* @param dataSourceArr 数据源,格式:@[@[@"语文", @"数学", @"英语"], @[@"优秀", @"良好"]],或直接传多维模型数组
|
||||||
|
* @param selectIndexs 默认选中的位置(传索引数组,如:@[@2, @1])
|
||||||
|
* @param resultBlock 选择后的回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
+ (void)showMultiPickerWithTitle:(nullable NSString *)title
|
||||||
|
dataSourceArr:(nullable NSArray *)dataSourceArr
|
||||||
|
selectIndexs:(nullable NSArray <NSNumber *> *)selectIndexs
|
||||||
|
resultBlock:(nullable BRStringResultModelArrayBlock)resultBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 4.显示【多列】选择器
|
||||||
|
*
|
||||||
|
* @param title 选择器标题
|
||||||
|
* @param dataSourceArr 数据源,格式:@[@[@"语文", @"数学", @"英语"], @[@"优秀", @"良好"]],或直接传多维模型数组
|
||||||
|
* @param selectIndexs 默认选中的位置(传索引数组,如:@[@2, @1])
|
||||||
|
* @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO
|
||||||
|
* @param resultBlock 选择后的回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
+ (void)showMultiPickerWithTitle:(nullable NSString *)title
|
||||||
|
dataSourceArr:(nullable NSArray *)dataSourceArr
|
||||||
|
selectIndexs:(nullable NSArray <NSNumber *> *)selectIndexs
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(nullable BRStringResultModelArrayBlock)resultBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 5.显示【联动】选择器
|
||||||
|
*
|
||||||
|
* @param title 选择器标题
|
||||||
|
* @param dataSourceArr 数据源,格式:直接传一维模型数组(NSArray <BRResultModel *>*)
|
||||||
|
* @param selectIndexs 默认选中的位置(传索引数组,如:@[@2, @1])
|
||||||
|
* @param isAutoSelect 是否自动选择,即滚动选择器后就执行结果回调,默认为 NO
|
||||||
|
* @param resultBlock 选择后的回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
+ (void)showLinkagePickerWithTitle:(nullable NSString *)title
|
||||||
|
dataSourceArr:(nullable NSArray *)dataSourceArr
|
||||||
|
selectIndexs:(nullable NSArray <NSNumber *> *)selectIndexs
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(nullable BRStringResultModelArrayBlock)resultBlock;
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
571
Pods/BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.m
generated
Executable file
571
Pods/BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.m
generated
Executable file
@@ -0,0 +1,571 @@
|
|||||||
|
//
|
||||||
|
// BRStringPickerView.m
|
||||||
|
// BRPickerViewDemo
|
||||||
|
//
|
||||||
|
// Created by renbo on 2017/8/11.
|
||||||
|
// Copyright © 2017 irenb. All rights reserved.
|
||||||
|
//
|
||||||
|
// 最新代码下载地址:https://github.com/91renb/BRPickerView
|
||||||
|
|
||||||
|
#import "BRStringPickerView.h"
|
||||||
|
|
||||||
|
@interface BRStringPickerView ()<UIPickerViewDelegate, UIPickerViewDataSource>
|
||||||
|
{
|
||||||
|
BOOL _dataSourceException; // 数据源格式是否有误
|
||||||
|
}
|
||||||
|
/** 选择器 */
|
||||||
|
@property (nonatomic, strong) UIPickerView *pickerView;
|
||||||
|
/** 单列选择的值 */
|
||||||
|
@property (nonatomic, copy) NSString *mSelectValue;
|
||||||
|
/** 多列选择的值 */
|
||||||
|
@property (nonatomic, copy) NSArray <NSString *>* mSelectValues;
|
||||||
|
|
||||||
|
/** 数据源 */
|
||||||
|
@property (nullable, nonatomic, copy) NSArray *mDataSourceArr;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation BRStringPickerView
|
||||||
|
|
||||||
|
#pragma mark - 1.显示【单列】选择器
|
||||||
|
+ (void)showPickerWithTitle:(NSString *)title
|
||||||
|
dataSourceArr:(NSArray *)dataSourceArr
|
||||||
|
selectIndex:(NSInteger)selectIndex
|
||||||
|
resultBlock:(BRStringResultModelBlock)resultBlock {
|
||||||
|
[self showPickerWithTitle:title dataSourceArr:dataSourceArr selectIndex:selectIndex isAutoSelect:NO resultBlock:resultBlock];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 2.显示【单列】选择器
|
||||||
|
+ (void)showPickerWithTitle:(NSString *)title
|
||||||
|
dataSourceArr:(NSArray *)dataSourceArr
|
||||||
|
selectIndex:(NSInteger)selectIndex
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(BRStringResultModelBlock)resultBlock {
|
||||||
|
// 创建选择器
|
||||||
|
BRStringPickerView *strPickerView = [[BRStringPickerView alloc]init];
|
||||||
|
strPickerView.pickerMode = BRStringPickerComponentSingle;
|
||||||
|
strPickerView.title = title;
|
||||||
|
strPickerView.dataSourceArr = dataSourceArr;
|
||||||
|
strPickerView.selectIndex = selectIndex;
|
||||||
|
strPickerView.isAutoSelect = isAutoSelect;
|
||||||
|
strPickerView.resultModelBlock = resultBlock;
|
||||||
|
|
||||||
|
// 显示
|
||||||
|
[strPickerView show];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 3.显示【多列】选择器
|
||||||
|
+ (void)showMultiPickerWithTitle:(NSString *)title
|
||||||
|
dataSourceArr:(NSArray *)dataSourceArr
|
||||||
|
selectIndexs:(NSArray <NSNumber *>*)selectIndexs
|
||||||
|
resultBlock:(BRStringResultModelArrayBlock)resultBlock {
|
||||||
|
[self showMultiPickerWithTitle:title dataSourceArr:dataSourceArr selectIndexs:selectIndexs isAutoSelect:NO resultBlock:resultBlock];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 4.显示【多列】选择器
|
||||||
|
+ (void)showMultiPickerWithTitle:(NSString *)title
|
||||||
|
dataSourceArr:(NSArray *)dataSourceArr
|
||||||
|
selectIndexs:(NSArray <NSNumber *>*)selectIndexs
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(BRStringResultModelArrayBlock)resultBlock {
|
||||||
|
// 创建选择器
|
||||||
|
BRStringPickerView *strPickerView = [[BRStringPickerView alloc]init];
|
||||||
|
strPickerView.pickerMode = BRStringPickerComponentMulti;
|
||||||
|
strPickerView.title = title;
|
||||||
|
strPickerView.dataSourceArr = dataSourceArr;
|
||||||
|
strPickerView.selectIndexs = selectIndexs;
|
||||||
|
strPickerView.isAutoSelect = isAutoSelect;
|
||||||
|
strPickerView.resultModelArrayBlock = resultBlock;
|
||||||
|
|
||||||
|
// 显示
|
||||||
|
[strPickerView show];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 5.显示【联动】选择器
|
||||||
|
+ (void)showLinkagePickerWithTitle:(nullable NSString *)title
|
||||||
|
dataSourceArr:(nullable NSArray *)dataSourceArr
|
||||||
|
selectIndexs:(nullable NSArray <NSNumber *> *)selectIndexs
|
||||||
|
isAutoSelect:(BOOL)isAutoSelect
|
||||||
|
resultBlock:(nullable BRStringResultModelArrayBlock)resultBlock {
|
||||||
|
// 创建选择器
|
||||||
|
BRStringPickerView *strPickerView = [[BRStringPickerView alloc]init];
|
||||||
|
strPickerView.pickerMode = BRStringPickerComponentLinkage;
|
||||||
|
strPickerView.title = title;
|
||||||
|
strPickerView.dataSourceArr = dataSourceArr;
|
||||||
|
strPickerView.selectIndexs = selectIndexs;
|
||||||
|
strPickerView.isAutoSelect = isAutoSelect;
|
||||||
|
strPickerView.resultModelArrayBlock = resultBlock;
|
||||||
|
|
||||||
|
// 显示
|
||||||
|
[strPickerView show];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 初始化自定义选择器
|
||||||
|
- (instancetype)initWithPickerMode:(BRStringPickerMode)pickerMode {
|
||||||
|
if (self = [super init]) {
|
||||||
|
self.pickerMode = pickerMode;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 处理选择器数据
|
||||||
|
- (void)handlerPickerData {
|
||||||
|
if (self.dataSourceArr.count == 0) {
|
||||||
|
_dataSourceException = YES;
|
||||||
|
}
|
||||||
|
id item = [self.dataSourceArr firstObject];
|
||||||
|
if (self.pickerMode == BRStringPickerComponentSingle) {
|
||||||
|
_dataSourceException = [item isKindOfClass:[NSArray class]];
|
||||||
|
} else if (self.pickerMode == BRStringPickerComponentMulti) {
|
||||||
|
_dataSourceException = [item isKindOfClass:[NSString class]];
|
||||||
|
} else if (self.pickerMode == BRStringPickerComponentLinkage) {
|
||||||
|
_dataSourceException = ![item isKindOfClass:[BRResultModel class]];
|
||||||
|
}
|
||||||
|
if (_dataSourceException) {
|
||||||
|
NSAssert(!_dataSourceException, @"数据源异常!请检查选择器数据源的格式");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理选择器当前选择的值
|
||||||
|
if (self.pickerMode == BRStringPickerComponentSingle) {
|
||||||
|
self.mDataSourceArr = self.dataSourceArr;
|
||||||
|
NSInteger selectIndex = 0;
|
||||||
|
if (self.selectIndex > 0 && self.selectIndex < self.mDataSourceArr.count) {
|
||||||
|
selectIndex = self.selectIndex;
|
||||||
|
} else {
|
||||||
|
if (self.mSelectValue) {
|
||||||
|
id item = [self.mDataSourceArr firstObject];
|
||||||
|
if ([item isKindOfClass:[BRResultModel class]]) {
|
||||||
|
for (NSInteger i = 0; i < self.mDataSourceArr.count; i++) {
|
||||||
|
BRResultModel *model = self.mDataSourceArr[i];
|
||||||
|
if ([model.value isEqualToString:self.mSelectValue]) {
|
||||||
|
selectIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ([self.mDataSourceArr containsObject:self.mSelectValue]) {
|
||||||
|
selectIndex = [self.mDataSourceArr indexOfObject:self.mSelectValue];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.selectIndex = selectIndex;
|
||||||
|
|
||||||
|
} else if (self.pickerMode == BRStringPickerComponentMulti) {
|
||||||
|
self.mDataSourceArr = self.dataSourceArr;
|
||||||
|
NSMutableArray *selectIndexs = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = 0; i < self.mDataSourceArr.count; i++) {
|
||||||
|
NSArray *itemArr = self.mDataSourceArr[i];
|
||||||
|
NSInteger row = 0;
|
||||||
|
if (self.selectIndexs.count > 0) {
|
||||||
|
if (i < self.selectIndexs.count) {
|
||||||
|
NSInteger index = [self.selectIndexs[i] integerValue];
|
||||||
|
row = ((index > 0 && index < itemArr.count) ? index : 0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (self.mSelectValues.count > 0 && i < self.mSelectValues.count) {
|
||||||
|
NSString *value = self.mSelectValues[i];
|
||||||
|
id item = [itemArr firstObject];
|
||||||
|
if ([item isKindOfClass:[BRResultModel class]]) {
|
||||||
|
for (NSInteger j = 0; j < itemArr.count; j++) {
|
||||||
|
BRResultModel *model = itemArr[j];
|
||||||
|
if ([model.value isEqualToString:value]) {
|
||||||
|
row = j;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ([itemArr containsObject:value]) {
|
||||||
|
row = [itemArr indexOfObject:value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[selectIndexs addObject:@(row)];
|
||||||
|
}
|
||||||
|
self.selectIndexs = [selectIndexs copy];
|
||||||
|
|
||||||
|
} else if (self.pickerMode == BRStringPickerComponentLinkage) {
|
||||||
|
|
||||||
|
NSMutableArray *selectIndexs = [[NSMutableArray alloc]init];
|
||||||
|
NSMutableArray *mDataSourceArr = [[NSMutableArray alloc]init];
|
||||||
|
|
||||||
|
BRResultModel *selectModel = nil;
|
||||||
|
BOOL hasNext = YES;
|
||||||
|
NSInteger i = 0;
|
||||||
|
|
||||||
|
NSMutableArray *dataArr = [self.dataSourceArr mutableCopy];
|
||||||
|
|
||||||
|
do {
|
||||||
|
NSArray *nextArr = [self getNextDataArr:dataArr selectModel:selectModel];
|
||||||
|
// 设置 numberOfComponents,防止 key 等于 parentKey 时进入死循环
|
||||||
|
if (nextArr.count == 0 || i > self.numberOfComponents - 1) {
|
||||||
|
hasNext = NO;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSInteger selectIndex = 0;
|
||||||
|
if (self.selectIndexs.count > i && [self.selectIndexs[i] integerValue] < nextArr.count) {
|
||||||
|
selectIndex = [self.selectIndexs[i] integerValue];
|
||||||
|
}
|
||||||
|
selectModel = nextArr[selectIndex];
|
||||||
|
|
||||||
|
[selectIndexs addObject:@(selectIndex)];
|
||||||
|
[mDataSourceArr addObject:nextArr];
|
||||||
|
|
||||||
|
i++;
|
||||||
|
|
||||||
|
} while (hasNext);
|
||||||
|
|
||||||
|
self.selectIndexs = [selectIndexs copy];
|
||||||
|
self.mDataSourceArr = [mDataSourceArr copy];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray <BRResultModel *>*)getNextDataArr:(NSArray *)dataArr selectModel:(BRResultModel *)selectModel {
|
||||||
|
NSMutableArray *tempArr = [[NSMutableArray alloc]init];
|
||||||
|
// parentKey = @"-1",表示是第一列数据
|
||||||
|
NSString *key = selectModel ? selectModel.key : @"-1";
|
||||||
|
for (BRResultModel *model in dataArr) {
|
||||||
|
if ([model.parentKey isEqualToString:key]) {
|
||||||
|
[tempArr addObject:model];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [tempArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 选择器
|
||||||
|
- (UIPickerView *)pickerView {
|
||||||
|
if (!_pickerView) {
|
||||||
|
CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
|
||||||
|
_pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight)];
|
||||||
|
_pickerView.backgroundColor = self.pickerStyle.pickerColor;
|
||||||
|
_pickerView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
|
||||||
|
_pickerView.dataSource = self;
|
||||||
|
_pickerView.delegate = self;
|
||||||
|
}
|
||||||
|
return _pickerView;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - UIPickerViewDataSource
|
||||||
|
// 1.设置 pickerView 的列数
|
||||||
|
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
|
||||||
|
switch (self.pickerMode) {
|
||||||
|
case BRStringPickerComponentSingle:
|
||||||
|
return 1;
|
||||||
|
break;
|
||||||
|
case BRStringPickerComponentMulti:
|
||||||
|
case BRStringPickerComponentLinkage:
|
||||||
|
return self.mDataSourceArr.count;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.设置 pickerView 每列的行数
|
||||||
|
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
|
||||||
|
switch (self.pickerMode) {
|
||||||
|
case BRStringPickerComponentSingle:
|
||||||
|
return self.mDataSourceArr.count;
|
||||||
|
break;
|
||||||
|
case BRStringPickerComponentMulti:
|
||||||
|
case BRStringPickerComponentLinkage:
|
||||||
|
{
|
||||||
|
NSArray *itemArr = self.mDataSourceArr[component];
|
||||||
|
return itemArr.count;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - UIPickerViewDelegate
|
||||||
|
// 3.设置 pickerView 的显示内容
|
||||||
|
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view {
|
||||||
|
// 1.自定义 row 的内容视图
|
||||||
|
UILabel *label = (UILabel *)view;
|
||||||
|
if (!label) {
|
||||||
|
label = [[UILabel alloc]init];
|
||||||
|
label.backgroundColor = [UIColor clearColor];
|
||||||
|
label.textAlignment = NSTextAlignmentCenter;
|
||||||
|
label.font = self.pickerStyle.pickerTextFont;
|
||||||
|
label.textColor = self.pickerStyle.pickerTextColor;
|
||||||
|
// 字体自适应属性
|
||||||
|
label.adjustsFontSizeToFitWidth = YES;
|
||||||
|
// 自适应最小字体缩放比例
|
||||||
|
label.minimumScaleFactor = 0.5f;
|
||||||
|
}
|
||||||
|
if (self.pickerMode == BRStringPickerComponentSingle) {
|
||||||
|
id item = self.mDataSourceArr[row];
|
||||||
|
if ([item isKindOfClass:[BRResultModel class]]) {
|
||||||
|
BRResultModel *model = (BRResultModel *)item;
|
||||||
|
label.text = model.value;
|
||||||
|
} else {
|
||||||
|
label.text = item;
|
||||||
|
}
|
||||||
|
} else if (self.pickerMode == BRStringPickerComponentMulti || self.pickerMode == BRStringPickerComponentLinkage) {
|
||||||
|
NSArray *itemArr = self.mDataSourceArr[component];
|
||||||
|
id item = [itemArr objectAtIndex:row];
|
||||||
|
if ([item isKindOfClass:[BRResultModel class]]) {
|
||||||
|
BRResultModel *model = (BRResultModel *)item;
|
||||||
|
label.text = model.value;
|
||||||
|
} else {
|
||||||
|
label.text = item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.设置选择器中间选中行的样式
|
||||||
|
[self.pickerStyle setupPickerSelectRowStyle:pickerView titleForRow:row forComponent:component];
|
||||||
|
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4.滚动 pickerView 执行的回调方法
|
||||||
|
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
|
||||||
|
switch (self.pickerMode) {
|
||||||
|
case BRStringPickerComponentSingle:
|
||||||
|
{
|
||||||
|
self.selectIndex = row;
|
||||||
|
|
||||||
|
// 滚动选择时执行 changeModelBlock
|
||||||
|
if (self.changeModelBlock) {
|
||||||
|
self.changeModelBlock([self getResultModel]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置自动选择时,滚动选择时就执行 resultModelBlock
|
||||||
|
if (self.isAutoSelect) {
|
||||||
|
if (self.resultModelBlock) {
|
||||||
|
self.resultModelBlock([self getResultModel]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BRStringPickerComponentMulti:
|
||||||
|
{
|
||||||
|
if (component < self.selectIndexs.count) {
|
||||||
|
NSMutableArray *mutableArr = [self.selectIndexs mutableCopy];
|
||||||
|
[mutableArr replaceObjectAtIndex:component withObject:@(row)];
|
||||||
|
self.selectIndexs = [mutableArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 滚动选择时执行 changeModelArrayBlock
|
||||||
|
if (self.changeModelArrayBlock) {
|
||||||
|
self.changeModelArrayBlock([self getResultModelArr]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置自动选择时,滚动选择时就执行 resultModelArrayBlock
|
||||||
|
if (self.isAutoSelect) {
|
||||||
|
if (self.resultModelArrayBlock) {
|
||||||
|
self.resultModelArrayBlock([self getResultModelArr]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BRStringPickerComponentLinkage:
|
||||||
|
{
|
||||||
|
if (component < self.selectIndexs.count) {
|
||||||
|
NSMutableArray *selectIndexs = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = 0; i < self.selectIndexs.count; i++) {
|
||||||
|
if (i < component) {
|
||||||
|
[selectIndexs addObject:self.selectIndexs[i]];
|
||||||
|
} else if (i == component) {
|
||||||
|
[selectIndexs addObject:@(row)];
|
||||||
|
} else {
|
||||||
|
[selectIndexs addObject:@(0)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.selectIndexs = [selectIndexs copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 刷新选择器数据
|
||||||
|
[self reloadData];
|
||||||
|
|
||||||
|
// 滚动选择时执行 changeModelArrayBlock
|
||||||
|
if (self.changeModelArrayBlock) {
|
||||||
|
self.changeModelArrayBlock([self getResultModelArr]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置自动选择时,滚动选择时就执行 resultModelArrayBlock
|
||||||
|
if (self.isAutoSelect) {
|
||||||
|
if (self.resultModelArrayBlock) {
|
||||||
|
self.resultModelArrayBlock([self getResultModelArr]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取【单列】选择器选择的值
|
||||||
|
- (BRResultModel *)getResultModel {
|
||||||
|
id item = self.selectIndex < self.mDataSourceArr.count ? self.mDataSourceArr[self.selectIndex] : nil;
|
||||||
|
if ([item isKindOfClass:[BRResultModel class]]) {
|
||||||
|
BRResultModel *model = (BRResultModel *)item;
|
||||||
|
model.index = self.selectIndex;
|
||||||
|
return model;
|
||||||
|
} else {
|
||||||
|
BRResultModel *model = [[BRResultModel alloc]init];
|
||||||
|
model.index = self.selectIndex;
|
||||||
|
model.value = item;
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 获取【多列】选择器选择的值
|
||||||
|
- (NSArray *)getResultModelArr {
|
||||||
|
NSMutableArray *resultModelArr = [[NSMutableArray alloc]init];
|
||||||
|
for (NSInteger i = 0; i < self.mDataSourceArr.count; i++) {
|
||||||
|
NSInteger index = [self.selectIndexs[i] integerValue];
|
||||||
|
NSArray *dataArr = self.mDataSourceArr[i];
|
||||||
|
|
||||||
|
id item = index < dataArr.count ? dataArr[index] : nil;
|
||||||
|
if ([item isKindOfClass:[BRResultModel class]]) {
|
||||||
|
BRResultModel *model = (BRResultModel *)item;
|
||||||
|
model.index = index;
|
||||||
|
[resultModelArr addObject:model];
|
||||||
|
} else {
|
||||||
|
BRResultModel *model = [[BRResultModel alloc]init];
|
||||||
|
model.index = index;
|
||||||
|
model.value = item;
|
||||||
|
[resultModelArr addObject:model];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [resultModelArr copy];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置行高
|
||||||
|
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
|
||||||
|
return self.pickerStyle.rowHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 重写父类方法
|
||||||
|
- (void)reloadData {
|
||||||
|
// 1.处理数据源
|
||||||
|
[self handlerPickerData];
|
||||||
|
// 2.刷新选择器
|
||||||
|
[self.pickerView reloadAllComponents];
|
||||||
|
// 3.滚动到选择的值
|
||||||
|
if (self.pickerMode == BRStringPickerComponentSingle) {
|
||||||
|
[self.pickerView selectRow:self.selectIndex inComponent:0 animated:NO];
|
||||||
|
} else if (self.pickerMode == BRStringPickerComponentMulti || self.pickerMode == BRStringPickerComponentLinkage) {
|
||||||
|
for (NSInteger i = 0; i < self.selectIndexs.count; i++) {
|
||||||
|
NSNumber *index = [self.selectIndexs objectAtIndex:i];
|
||||||
|
[self.pickerView selectRow:[index integerValue] inComponent:i animated:NO];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)addPickerToView:(UIView *)view {
|
||||||
|
// 1.添加选择器
|
||||||
|
if (view) {
|
||||||
|
// 立即刷新容器视图 view 的布局(防止 view 使用自动布局时,选择器视图无法正常显示)
|
||||||
|
[view setNeedsLayout];
|
||||||
|
[view layoutIfNeeded];
|
||||||
|
|
||||||
|
self.frame = view.bounds;
|
||||||
|
CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
|
||||||
|
CGFloat pickerFooterViewHeight = self.pickerFooterView ? self.pickerFooterView.bounds.size.height : 0;
|
||||||
|
self.pickerView.frame = CGRectMake(0, pickerHeaderViewHeight, view.bounds.size.width, view.bounds.size.height - pickerHeaderViewHeight - pickerFooterViewHeight);
|
||||||
|
[self addSubview:self.pickerView];
|
||||||
|
} else {
|
||||||
|
// iOS16:重新设置 pickerView 高度(解决懒加载设置frame不生效问题)
|
||||||
|
CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
|
||||||
|
self.pickerView.frame = CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight);
|
||||||
|
|
||||||
|
[self.alertView addSubview:self.pickerView];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ③添加中间选择行的两条分割线
|
||||||
|
if (self.pickerStyle.clearPickerNewStyle) {
|
||||||
|
[self.pickerStyle addSeparatorLineView:self.pickerView];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.绑定数据
|
||||||
|
[self reloadData];
|
||||||
|
|
||||||
|
__weak typeof(self) weakSelf = self;
|
||||||
|
self.doneBlock = ^{
|
||||||
|
// 点击确定按钮后,执行block回调
|
||||||
|
if (weakSelf.pickerMode == BRStringPickerComponentSingle) {
|
||||||
|
if (weakSelf.resultModelBlock) {
|
||||||
|
weakSelf.resultModelBlock([weakSelf getResultModel]);
|
||||||
|
}
|
||||||
|
} else if (weakSelf.pickerMode == BRStringPickerComponentMulti || weakSelf.pickerMode == BRStringPickerComponentLinkage) {
|
||||||
|
if (weakSelf.resultModelArrayBlock) {
|
||||||
|
weakSelf.resultModelArrayBlock([weakSelf getResultModelArr]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
[super addPickerToView:view];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 重写父类方法
|
||||||
|
- (void)addSubViewToPicker:(UIView *)customView {
|
||||||
|
[self.pickerView addSubview:customView];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 弹出选择器视图
|
||||||
|
- (void)show {
|
||||||
|
[self addPickerToView:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - 关闭选择器视图
|
||||||
|
- (void)dismiss {
|
||||||
|
[self removePickerFromView:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - setter 方法
|
||||||
|
- (void)setPlistName:(NSString *)plistName {
|
||||||
|
NSString *path = [[NSBundle mainBundle] pathForResource:plistName ofType:nil];
|
||||||
|
if (path && path.length > 0) {
|
||||||
|
self.dataSourceArr = [[NSArray alloc] initWithContentsOfFile:path];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setSelectValue:(NSString *)selectValue {
|
||||||
|
self.mSelectValue = selectValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setSelectValues:(NSArray<NSString *> *)selectValues {
|
||||||
|
self.mSelectValues = selectValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - getter 方法
|
||||||
|
- (NSArray *)mDataSourceArr {
|
||||||
|
if (!_mDataSourceArr) {
|
||||||
|
_mDataSourceArr = [NSArray array];
|
||||||
|
}
|
||||||
|
return _mDataSourceArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray<NSNumber *> *)selectIndexs {
|
||||||
|
if (!_selectIndexs) {
|
||||||
|
_selectIndexs = [NSArray array];
|
||||||
|
}
|
||||||
|
return _selectIndexs;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray<NSString *> *)mSelectValues {
|
||||||
|
if (!_mSelectValues) {
|
||||||
|
_mSelectValues = [NSArray array];
|
||||||
|
}
|
||||||
|
return _mSelectValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSInteger)numberOfComponents {
|
||||||
|
if (_numberOfComponents <= 0) {
|
||||||
|
_numberOfComponents = 3;
|
||||||
|
}
|
||||||
|
return _numberOfComponents;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
21
Pods/BRPickerView/LICENSE
generated
Executable file
21
Pods/BRPickerView/LICENSE
generated
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 91renb
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
530
Pods/BRPickerView/README.md
generated
Executable file
530
Pods/BRPickerView/README.md
generated
Executable file
@@ -0,0 +1,530 @@
|
|||||||
|
# BRPickerView
|
||||||
|
|
||||||
|
BRPickerView 封装的是iOS中常用的选择器组件,主要包括:日期选择器(支持年月日、年月等15种日期样式选择,支持设置星期、至今等)、地址选择器(支持省市区、省市、省三种地区选择)、自定义字符串选择器(支持单列、多列、二级联动、三级联动选择)。支持自定义主题样式,适配深色模式,支持将选择器组件添加到指定容器视图。
|
||||||
|
|
||||||
|
【说明】
|
||||||
|
|
||||||
|
- 当前最新版本为: `2.8.1` 。
|
||||||
|
- 如果不能找到最新版本,请先执行一下 `pod repo update` 更新本地仓库,待更新完成后;再执行 `pod search BRPickerView` 进行搜索,就会看到最新版本。
|
||||||
|
|
||||||
|
# 效果演示
|
||||||
|
|
||||||
|
查看并运行 `BRPickerViewDemo.xcodeproj`
|
||||||
|
|
||||||
|
|  |  |
|
||||||
|
| :----------------------------------------------------------: | :----------------------------------------------------------: |
|
||||||
|
| 框架Demo运行效果图1 | 框架Demo运行效果图2 |
|
||||||
|
|
||||||
|
# 安装
|
||||||
|
|
||||||
|
#### 1. CocoaPods
|
||||||
|
|
||||||
|
1. 在 Podfile 中添加 `pod 'BRPickerView'`。
|
||||||
|
|
||||||
|
2. 执行 `pod install` 或 `pod update` 。
|
||||||
|
|
||||||
|
3. 导入头文件 ` #import <BRPickerView.h>`。
|
||||||
|
|
||||||
|
|
||||||
|
#### 2. 手动导入
|
||||||
|
|
||||||
|
1. 将与 `README.md` 同级目录下的 `BRPickerView` 文件夹拽入项目中
|
||||||
|
|
||||||
|
2. 导入头文件 ` #import "BRPickerView.h"`。
|
||||||
|
|
||||||
|
|
||||||
|
# 系统要求
|
||||||
|
|
||||||
|
- iOS 8.0+
|
||||||
|
- ARC
|
||||||
|
|
||||||
|
# 使用
|
||||||
|
|
||||||
|
#### 1. 时间选择器:`BRDatePickerView`
|
||||||
|
|
||||||
|
查看 BRDatePickerView.h 头文件,里面提供了两种使用方式,参见源码。
|
||||||
|
|
||||||
|
```objective-c
|
||||||
|
/// 日期选择器格式
|
||||||
|
typedef NS_ENUM(NSInteger, BRDatePickerMode) {
|
||||||
|
// ----- 以下4种是系统样式(兼容国际化日期格式) -----
|
||||||
|
/** 【yyyy-MM-dd】UIDatePickerModeDate(美式日期:MM-dd-yyyy;英式日期:dd-MM-yyyy)*/
|
||||||
|
BRDatePickerModeDate,
|
||||||
|
/** 【yyyy-MM-dd HH:mm】 UIDatePickerModeDateAndTime */
|
||||||
|
BRDatePickerModeDateAndTime,
|
||||||
|
/** 【HH:mm】UIDatePickerModeTime */
|
||||||
|
BRDatePickerModeTime,
|
||||||
|
/** 【HH:mm】UIDatePickerModeCountDownTimer */
|
||||||
|
BRDatePickerModeCountDownTimer,
|
||||||
|
|
||||||
|
// ----- 以下14种是自定义样式 -----
|
||||||
|
/** 【yyyy-MM-dd HH:mm:ss】年月日时分秒 */
|
||||||
|
BRDatePickerModeYMDHMS,
|
||||||
|
/** 【yyyy-MM-dd HH:mm】年月日时分 */
|
||||||
|
BRDatePickerModeYMDHM,
|
||||||
|
/** 【yyyy-MM-dd HH】年月日时 */
|
||||||
|
BRDatePickerModeYMDH,
|
||||||
|
/** 【MM-dd HH:mm】月日时分 */
|
||||||
|
BRDatePickerModeMDHM,
|
||||||
|
/** 【yyyy-MM-dd】年月日(兼容国际化日期:dd-MM-yyyy)*/
|
||||||
|
BRDatePickerModeYMD,
|
||||||
|
/** 【yyyy-MM】年月(兼容国际化日期:MM-yyyy)*/
|
||||||
|
BRDatePickerModeYM,
|
||||||
|
/** 【yyyy】年 */
|
||||||
|
BRDatePickerModeY,
|
||||||
|
/** 【MM-dd】月日 */
|
||||||
|
BRDatePickerModeMD,
|
||||||
|
/** 【HH:mm:ss】时分秒 */
|
||||||
|
BRDatePickerModeHMS,
|
||||||
|
/** 【HH:mm】时分 */
|
||||||
|
BRDatePickerModeHM,
|
||||||
|
/** 【mm:ss】分秒 */
|
||||||
|
BRDatePickerModeMS,
|
||||||
|
|
||||||
|
/** 【yyyy-qq】年季度 */
|
||||||
|
BRDatePickerModeYQ,
|
||||||
|
/** 【yyyy-MM-ww】年月周 */
|
||||||
|
BRDatePickerModeYMW,
|
||||||
|
/** 【yyyy-ww】年周 */
|
||||||
|
BRDatePickerModeYW
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
- 使用示例(参考Demo):
|
||||||
|
|
||||||
|
```objective-c
|
||||||
|
// 1.创建日期选择器
|
||||||
|
BRDatePickerView *datePickerView = [[BRDatePickerView alloc]init];
|
||||||
|
// 2.设置属性
|
||||||
|
datePickerView.pickerMode = BRDatePickerModeYMD;
|
||||||
|
datePickerView.title = @"选择年月日";
|
||||||
|
// datePickerView.selectValue = @"2019-10-30";
|
||||||
|
datePickerView.selectDate = [NSDate br_setYear:2019 month:10 day:30];
|
||||||
|
datePickerView.minDate = [NSDate br_setYear:1949 month:3 day:12];
|
||||||
|
datePickerView.maxDate = [NSDate date];
|
||||||
|
datePickerView.isAutoSelect = YES;
|
||||||
|
datePickerView.resultBlock = ^(NSDate *selectDate, NSString *selectValue) {
|
||||||
|
NSLog(@"选择的值:%@", selectValue);
|
||||||
|
};
|
||||||
|
// 设置自定义样式
|
||||||
|
BRPickerStyle *customStyle = [[BRPickerStyle alloc]init];
|
||||||
|
customStyle.pickerColor = BR_RGB_HEX(0xd9dbdf, 1.0f);
|
||||||
|
customStyle.pickerTextColor = [UIColor redColor];
|
||||||
|
customStyle.separatorColor = [UIColor redColor];
|
||||||
|
datePickerView.pickerStyle = customStyle;
|
||||||
|
|
||||||
|
// 3.显示
|
||||||
|
[datePickerView show];
|
||||||
|
```
|
||||||
|
|
||||||
|
**时间选择器显示类型的效果图(默认样式):**
|
||||||
|
|
||||||
|
- 以下4种样式是使用 UIDatePicker 类 进行封装的,支持循环滚动
|
||||||
|
|
||||||
|
|  |  |
|
||||||
|
| :----------------------------------------------------------: | :----------------------------------------------------------: |
|
||||||
|
| 样式1:BRDatePickerModeDate | 样式2:BRDatePickerModeDateAndTime |
|
||||||
|
| | |
|
||||||
|
|  |  |
|
||||||
|
| 样式3:BRDatePickerModeTime | 样式4:BRDatePickerModeCountDownTimer |
|
||||||
|
|
||||||
|
- 以下11种样式是使用 UIPickerView 类进行封装的。
|
||||||
|
|
||||||
|
|  |  |
|
||||||
|
| :----------------------------------------------------------: | :----------------------------------------------------------: |
|
||||||
|
| 样式5:BRDatePickerModeYMDHMS | 样式6:BRDatePickerModeYMDHM |
|
||||||
|
| | |
|
||||||
|
|  |  |
|
||||||
|
| 样式7:BRDatePickerModeYMDH | 样式8:BRDatePickerModeMDHM |
|
||||||
|
| | |
|
||||||
|
|  |  |
|
||||||
|
| 样式9:BRDatePickerModeYMD | 样式10:BRDatePickerModeYM |
|
||||||
|
| | |
|
||||||
|
|  |  |
|
||||||
|
| 样式11:BRDatePickerModeY | 样式12:BRDatePickerModeMD |
|
||||||
|
| | |
|
||||||
|
|  |  |
|
||||||
|
| 样式13:BRDatePickerModeHMS | 样式14:BRDatePickerModeHM |
|
||||||
|
| | |
|
||||||
|
|  | |
|
||||||
|
| 样式15:BRDatePickerModeMS | |
|
||||||
|
|
||||||
|
- 其它日期样式
|
||||||
|
|
||||||
|
|  |  |
|
||||||
|
| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 设置显示星期:datePickerView.showWeek = YES; | 设置显示星期:datePickerView.showWeek = YES; |
|
||||||
|
| | |
|
||||||
|
|  |  |
|
||||||
|
| 设置添加至今:datePickerView.addToNow = YES; | 设置显示今天:datePickerView.showToday = YES; |
|
||||||
|
| | |
|
||||||
|
|  |  |
|
||||||
|
| 日期单位显示样式:datePickerView.showUnitType = BRShowUnitTypeOnlyCenter; | 设置选择器中间选中行的背景颜色:selectRowColor |
|
||||||
|
|
||||||
|
```objective-c
|
||||||
|
// 设置选择器中间选中行的样式
|
||||||
|
BRPickerStyle *customStyle = [[BRPickerStyle alloc]init];
|
||||||
|
customStyle.selectRowColor = [UIColor blueColor];
|
||||||
|
customStyle.selectRowTextFont = [UIFont boldSystemFontOfSize:20.0f];
|
||||||
|
customStyle.selectRowTextColor = [UIColor redColor];
|
||||||
|
datePickerView.pickerStyle = customStyle;
|
||||||
|
```
|
||||||
|
|
||||||
|
|  |  |
|
||||||
|
| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 样式:BRDatePickerModeYMD (默认非中文环境显示英式日期) | 样式:BRDatePickerModeYM (默认非中文环境显示英式日期) |
|
||||||
|
|
||||||
|
- 几种常见的弹框样式模板
|
||||||
|
|
||||||
|
|  |  |
|
||||||
|
| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||||
|
| 弹框样式模板1:datePickerView.pickerStyle = [BRPickerStyle pickerStyleWithThemeColor:[UIColor blueColor]]; | 弹框样式模板2:datePickerView.pickerStyle = [BRPickerStyle pickerStyleWithDoneTextColor:[UIColor blueColor]]; |
|
||||||
|
| | |
|
||||||
|
|  |  |
|
||||||
|
| 弹框样式模板3:datePickerView.pickerStyle = [BRPickerStyle pickerStyleWithDoneBtnImage:[UIImage imageNamed:@"icon_close"]]; | 添加选择器的头视图:pickerHeaderView |
|
||||||
|
|
||||||
|
```objective-c
|
||||||
|
// 添加选择器头视图(pickerHeaderView)
|
||||||
|
UIView *headerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 36)];
|
||||||
|
headerView.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:0.1f];
|
||||||
|
NSArray *unitArr = @[@"年", @"月", @"日"];
|
||||||
|
for (NSInteger i = 0; i < unitArr.count; i++) {
|
||||||
|
CGFloat width = SCREEN_WIDTH / unitArr.count;
|
||||||
|
CGFloat orginX = i * (SCREEN_WIDTH / unitArr.count);
|
||||||
|
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(orginX, 0, width, 36)];
|
||||||
|
label.backgroundColor = [UIColor clearColor];
|
||||||
|
label.textAlignment = NSTextAlignmentCenter;
|
||||||
|
label.font = [UIFont systemFontOfSize:16.0f];
|
||||||
|
label.textColor = [UIColor darkGrayColor];
|
||||||
|
label.text = unitArr[i];
|
||||||
|
[headerView addSubview:label];
|
||||||
|
}
|
||||||
|
datePickerView.pickerHeaderView = headerView;
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. 地址选择器:`BRAddressPickerView`
|
||||||
|
|
||||||
|
查看 BRAddressPickerView.h 头文件,里面提供了两种使用方式,参见源码。
|
||||||
|
|
||||||
|
- 使用示例(参考Demo):
|
||||||
|
|
||||||
|
```objective-c
|
||||||
|
/// 地址选择器
|
||||||
|
BRAddressPickerView *addressPickerView = [[BRAddressPickerView alloc]init];
|
||||||
|
addressPickerView.pickerMode = BRAddressPickerModeArea;
|
||||||
|
addressPickerView.title = @"请选择地区";
|
||||||
|
//addressPickerView.selectValues = @[@"浙江省", @"杭州市", @"西湖区"];
|
||||||
|
addressPickerView.selectIndexs = @[@10, @0, @4];
|
||||||
|
addressPickerView.isAutoSelect = YES;
|
||||||
|
addressPickerView.resultBlock = ^(BRProvinceModel *province, BRCityModel *city, BRAreaModel *area) {
|
||||||
|
NSLog(@"选择的值:%@", [NSString stringWithFormat:@"%@ %@ %@", province.name, city.name, area.name]);
|
||||||
|
};
|
||||||
|
|
||||||
|
[addressPickerView show];
|
||||||
|
```
|
||||||
|
|
||||||
|
- 地址选择器的3种显示类型(showType 的3个枚举值):
|
||||||
|
|
||||||
|
|  |  |
|
||||||
|
| :----------------------------------------------------------: | :----------------------------------------------------------: |
|
||||||
|
| 样式1:BRAddressPickerModeProvince | 样式2:BRAddressPickerModeCity |
|
||||||
|
| | |
|
||||||
|
|  | |
|
||||||
|
| 样式3:BRAddressPickerModeArea | |
|
||||||
|
|
||||||
|
#### 3. 自定义字符串选择器:`BRStringPickerView`
|
||||||
|
|
||||||
|
查看 BRStringPickerView.h 头文件,里面提供了两种使用方式,参见源码。
|
||||||
|
|
||||||
|
- 使用示例(参考Demo):
|
||||||
|
|
||||||
|
```objective-c
|
||||||
|
/// 1.单列字符串选择器(传字符串数组)
|
||||||
|
BRStringPickerView *stringPickerView = [[BRStringPickerView alloc]init];
|
||||||
|
stringPickerView.pickerMode = BRStringPickerComponentSingle;
|
||||||
|
stringPickerView.title = @"学历";
|
||||||
|
stringPickerView.dataSourceArr = @[@"大专以下", @"大专", @"本科", @"硕士", @"博士", @"博士后"];
|
||||||
|
stringPickerView.selectIndex = 2;
|
||||||
|
stringPickerView.resultModelBlock = ^(BRResultModel *resultModel) {
|
||||||
|
NSLog(@"选择的值:%@", resultModel.value);
|
||||||
|
};
|
||||||
|
|
||||||
|
[stringPickerView show];
|
||||||
|
|
||||||
|
|
||||||
|
/// 2.单列字符串选择器(可以传模型数组)
|
||||||
|
NSArray *infoArr = @[@{@"key": @"1001", @"value": @"无融资", @"remark": @""},
|
||||||
|
@{@"key": @"2001", @"value": @"天使轮", @"remark": @""},
|
||||||
|
@{@"key": @"3001", @"value": @"A轮", @"remark": @""},
|
||||||
|
@{@"key": @"4001", @"value": @"B轮", @"remark": @""},
|
||||||
|
@{@"key": @"5001", @"value": @"C轮以后", @"remark": @""},
|
||||||
|
@{@"key": @"6001", @"value": @"已上市", @"remark": @""}];
|
||||||
|
NSMutableArray *modelArr = [[NSMutableArray alloc]init];
|
||||||
|
for (NSDictionary *dic in infoArr) {
|
||||||
|
BRResultModel *model = [[BRResultModel alloc]init];
|
||||||
|
model.key = dic[@"key"];
|
||||||
|
model.value = dic[@"value"];
|
||||||
|
model.remark = dic[@"remark"];
|
||||||
|
[modelArr addObject:model];
|
||||||
|
}
|
||||||
|
BRStringPickerView *stringPickerView = [[BRStringPickerView alloc]init];
|
||||||
|
stringPickerView.pickerMode = BRStringPickerComponentSingle;
|
||||||
|
stringPickerView.title = @"融资情况";
|
||||||
|
stringPickerView.dataSourceArr = [modelArr copy];
|
||||||
|
stringPickerView.selectIndex = 2;
|
||||||
|
stringPickerView.resultModelBlock = ^(BRResultModel *resultModel) {
|
||||||
|
NSLog(@"选择的索引:%@", @(resultModel.index));
|
||||||
|
NSLog(@"选择的值:%@", resultModel.value);
|
||||||
|
};
|
||||||
|
|
||||||
|
[stringPickerView show];
|
||||||
|
|
||||||
|
|
||||||
|
/// 3.多列字符串选择器
|
||||||
|
BRStringPickerView *stringPickerView = [[BRStringPickerView alloc]init];
|
||||||
|
stringPickerView.pickerMode = BRStringPickerComponentMulti;
|
||||||
|
stringPickerView.title = @"自定义多列字符串";
|
||||||
|
stringPickerView.dataSourceArr = @[@[@"语文", @"数学", @"英语", @"物理", @"化学", @"生物"], @[@"优秀", @"良好", @"及格", @"不及格"]];
|
||||||
|
stringPickerView.selectIndexs = @[@2, @1];
|
||||||
|
stringPickerView.resultModelArrayBlock = ^(NSArray<BRResultModel *> *resultModelArr) {
|
||||||
|
NSLog(@"选择的值:%@", [NSString stringWithFormat:@"%@,%@", resultModelArr[0].value, resultModelArr[1].value]);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 设置选择器中间选中行的样式
|
||||||
|
BRPickerStyle *customStyle = [[BRPickerStyle alloc]init];
|
||||||
|
customStyle.selectRowTextFont = [UIFont boldSystemFontOfSize:20.0f];
|
||||||
|
customStyle.selectRowTextColor = [UIColor blueColor];
|
||||||
|
stringPickerView.pickerStyle = customStyle;
|
||||||
|
|
||||||
|
[stringPickerView show];
|
||||||
|
```
|
||||||
|
|
||||||
|
- 字符串选择器效果图:
|
||||||
|
|
||||||
|
|  |  |
|
||||||
|
| :----------------------------------------------------------: | :----------------------------------------------------------: |
|
||||||
|
| 单列字符串选择器 | 单列字符串选择器 |
|
||||||
|
| | |
|
||||||
|
|  | |
|
||||||
|
| 多列字符串选择器 | |
|
||||||
|
|
||||||
|
# 更新记录
|
||||||
|
|
||||||
|
#### 2022-07-08(V2.8.0)
|
||||||
|
|
||||||
|
- 优化代码。
|
||||||
|
|
||||||
|
#### 2022-06-16(V2.7.8)
|
||||||
|
|
||||||
|
- 优化代码。
|
||||||
|
|
||||||
|
#### 2022-03-30(V2.7.7)
|
||||||
|
|
||||||
|
- 优化代码。
|
||||||
|
|
||||||
|
#### 2021-10-09(V2.7.6)
|
||||||
|
|
||||||
|
- 适配iOS15
|
||||||
|
|
||||||
|
#### 2021-05-28(V2.7.5)
|
||||||
|
|
||||||
|
- 日期选择器新增属性:`monthNames` 和 `customUnit`
|
||||||
|
|
||||||
|
- 解决已知问题:[#232](https://github.com/91renb/BRPickerView/issues/232) 、[#231](https://github.com/91renb/BRPickerView/issues/231) 、[#230](https://github.com/91renb/BRPickerView/issues/230) 、[#227](https://github.com/91renb/BRPickerView/issues/227) 、[#225](https://github.com/91renb/BRPickerView/issues/225) 、[#219](https://github.com/91renb/BRPickerView/issues/219) 、[#206](https://github.com/91renb/BRPickerView/issues/206)
|
||||||
|
|
||||||
|
#### 2020-09-25(V2.7.3)
|
||||||
|
|
||||||
|
- 适配选择器iOS14的样式:[#189](https://github.com/91renb/BRPickerView/issues/189) 、[#191](https://github.com/91renb/BRPickerView/issues/191)
|
||||||
|
|
||||||
|
#### 2020-09-23(V2.7.2)
|
||||||
|
|
||||||
|
- 日期选择器新增添加自定义字符串属性:`firstRowContent` 和 `lastRowContent`
|
||||||
|
- 解决日期选择器设置最小日期时,存在的联动不正确的问题:[#184](https://github.com/91renb/BRPickerView/issues/184)
|
||||||
|
|
||||||
|
#### 2020-08-28(V2.7.0)
|
||||||
|
|
||||||
|
- 日期选择器添加 `nonSelectableDates` 属性:[#178](https://github.com/91renb/BRPickerView/issues/178)
|
||||||
|
- 优化选中行文本显示:[#177](https://github.com/91renb/BRPickerView/issues/177)
|
||||||
|
|
||||||
|
#### 2020-08-16(V2.6.8)
|
||||||
|
|
||||||
|
- 优化代码,适配 iPad 分屏显示
|
||||||
|
- 新增 `keyView` 属性(即组件的父视图:可以将组件添加到 自己获取的 keyWindow 上,或页面的 view 上)
|
||||||
|
|
||||||
|
#### 2020-08-09(V2.6.7)
|
||||||
|
|
||||||
|
- 适配 iOS14
|
||||||
|
|
||||||
|
#### 2020-08-06(V2.6.6)
|
||||||
|
|
||||||
|
- 修复 [#163](https://github.com/91renb/BRPickerView/issues/163) 和 [#170](https://github.com/91renb/BRPickerView/issues/170)
|
||||||
|
|
||||||
|
#### 2020-07-18(V2.6.5)
|
||||||
|
|
||||||
|
- 字符串选择器新增支持多级联动选择
|
||||||
|
|
||||||
|
#### 2020-06-24(V2.6.3)
|
||||||
|
|
||||||
|
- 日期选择器新增属性:`timeZone` 和 `addCustomString`
|
||||||
|
|
||||||
|
#### 2020-05-12(V2.6.2)
|
||||||
|
|
||||||
|
- 实现 [#145](#145) 和 [#146](#146) 需求
|
||||||
|
|
||||||
|
#### 2020-04-30(V2.6.0)
|
||||||
|
|
||||||
|
- 新增样式属性:`selectRowTextColor` 和 `selectRowTextFont`
|
||||||
|
- 日期选择器新增数字显示属性:`numberFullName`
|
||||||
|
- 优化代码,添加 `BRDatePickerModeYMD` 支持国际化英式日期
|
||||||
|
|
||||||
|
- 修复 [#143](#143)
|
||||||
|
|
||||||
|
#### 2020-04-27(V2.5.8)
|
||||||
|
|
||||||
|
- 修复 [#138](https://github.com/91renb/BRPickerView/issues/138) 和 [#142](https://github.com/91renb/BRPickerView/issues/142)
|
||||||
|
- 日期选择器新增 `descending` 属性,支持降序的时间列表
|
||||||
|
- 更新地址选择器地区数据源
|
||||||
|
|
||||||
|
#### 2020-03-31(V2.5.7)
|
||||||
|
|
||||||
|
- 优化代码,解决已知问题
|
||||||
|
|
||||||
|
#### 2020-02-26(V2.5.6)
|
||||||
|
|
||||||
|
- 优化代码,兼容部分国际化日期样式
|
||||||
|
|
||||||
|
#### 2020-02-24(V2.5.5)
|
||||||
|
|
||||||
|
- 添加设置选择器选中行背景颜色的功能,新增属性 `selectRowColor`
|
||||||
|
|
||||||
|
#### 2020-01-31(V2.5.3)
|
||||||
|
|
||||||
|
- 新增属性:`pickerHeaderView`、`pickerFooterView`
|
||||||
|
- 新增刷新选择器数据方法:`reloadData`
|
||||||
|
|
||||||
|
#### 2020-01-05(V2.5.1)
|
||||||
|
|
||||||
|
- 优化代码,添加 `BRDatePickerModeYM` 支持国际化英式日期
|
||||||
|
|
||||||
|
#### 2020-01-02(V2.5.0)
|
||||||
|
|
||||||
|
- 日期选择器新增属性:`showUnitType`(日期单位显示样式)、`minuteInterval`、`secondInterval`
|
||||||
|
- 封装了常用的几种模板样式,使用更加简单便捷
|
||||||
|
- 框架内默认适配深色模式显示
|
||||||
|
|
||||||
|
#### 2019-12-26(V2.4.6)
|
||||||
|
|
||||||
|
- 添加支持动态更新属性 `title` 、 `selectDate`、`pickerMode` 的值
|
||||||
|
- 日期选择器添加 `showWeek` 属性,及新增 `BRDatePickerModeMS` 日期类型
|
||||||
|
- 优化选择器【用法二】的使用,新增选择器滚动选择时回调的属性
|
||||||
|
|
||||||
|
#### 2019-11-28(V2.4.5)
|
||||||
|
|
||||||
|
- 日期选择器新增选择 ”至今“ 和 显示 ”今天“ 的功能,见以下两个属性:
|
||||||
|
|
||||||
|
`showToday` :控制是否显示 “今天” ,默认为 NO
|
||||||
|
|
||||||
|
`addToNow`:控制是否添加选择 “至今”,默认为 NO
|
||||||
|
|
||||||
|
#### 2019-11-26(V2.4.3)
|
||||||
|
|
||||||
|
- 日期选择器新增以下三种选择类型:
|
||||||
|
|
||||||
|
`BRDatePickerModeYMDHMS`(年月日时分秒)、`BRDatePickerModeYMDE`(年月日星期)、`BRDatePickerModeHMS`(时分秒)
|
||||||
|
|
||||||
|
- 更新地址选择器地区数据源
|
||||||
|
|
||||||
|
#### 2019-11-07(V2.4.2)
|
||||||
|
|
||||||
|
- 日期选择器添加:BRDatePickerModeYMDH(yyyy-MM-dd HH)类型
|
||||||
|
- 地址选择器添加:selectIndexs 属性,可根据索引去设置默认选择
|
||||||
|
- 适配横屏及刘海屏安全区域显示效果
|
||||||
|
|
||||||
|
#### 2019-11-04(V2.4.0)
|
||||||
|
|
||||||
|
- 优化选择器子目录管理,方便轻量级、模块化集成
|
||||||
|
|
||||||
|
`pod 'BRPickerView'` // 集成全部的功能
|
||||||
|
|
||||||
|
`pod 'BRPickerView/DatePickerView'` // 仅集成日期选择器的功能
|
||||||
|
|
||||||
|
`pod 'BRPickerView/AddressPickerView'` // 仅集成地址选择器的功能
|
||||||
|
|
||||||
|
`pod 'BRPickerView/StringPickerView'` // 仅集成字符串选择器的功能
|
||||||
|
|
||||||
|
#### 2019-11-01(V2.3.8)
|
||||||
|
|
||||||
|
- 优化代码,添加更多的自定义样式属性
|
||||||
|
|
||||||
|
#### 2019-10-30(V2.3.6)
|
||||||
|
|
||||||
|
- 优化代码,添加国际化支持
|
||||||
|
|
||||||
|
#### 2019-10-26(V2.3.5)
|
||||||
|
|
||||||
|
- 添加传统的创建对象设置属性的使用方式
|
||||||
|
- 开放设置选择器颜色及样式,适配深色模式
|
||||||
|
- 更新省市区数据源,数据与政府官网最新公布的一致(参见:[行政区划代码](http://www.mca.gov.cn/article/sj/xzqh/2019/))
|
||||||
|
- 支持将选择器添加到指定容器视图上(见BaseView.h文件,扩展一方法)
|
||||||
|
- 支持将子视图添加到选择器上(见BaseView.h文件,扩展二方法)
|
||||||
|
- 优化代码,配置Pod库的层级目录
|
||||||
|
|
||||||
|
#### 2018-04-27(V2.2.1):
|
||||||
|
|
||||||
|
- 修复bug,适配iPad和横屏显示。
|
||||||
|
- 优化代码,提高框架适应性,降低内存消耗。
|
||||||
|
|
||||||
|
#### 2018-04-03(V2.2.0)
|
||||||
|
|
||||||
|
- 时间选择器新添加了7种显示类型(BRDatePickerMode),可根据自己项目的需求选择性使用。
|
||||||
|
- 适配横屏,及 iPhoneX 底部安全区域。
|
||||||
|
- 修改了最小时间和最大时间的参数名称(以前版本是传 NSString 类型, 现在传 NSDate 类型)
|
||||||
|
- 修复比较时间大小时出现的bug。
|
||||||
|
|
||||||
|
#### 2018-03-19(V2.1.3)
|
||||||
|
|
||||||
|
- 修改地址选择器确认选择后的回调参数。
|
||||||
|
- 现修改如下:可通过省市区的模型获取省市区的 name(名称)、code(id)、index(索引)`resultBlock:^(BRProvinceModel *province, BRCityModel *city, BRAreaModel *area) {}`
|
||||||
|
- 去掉第三方依赖库 `MJExtension` ,修改为手动解析地址数据源。
|
||||||
|
|
||||||
|
#### 2018-03-11(V2.1.2)
|
||||||
|
|
||||||
|
- 重命名了Github用户名,更新项目相关的路径。(提示:pod之前的版本不受影响)
|
||||||
|
|
||||||
|
#### 2018-02-28(V2.1.1)
|
||||||
|
|
||||||
|
- 修复某些情况下无法用bundle加载本地数据源(BRCity.plist)bug。
|
||||||
|
|
||||||
|
#### 2018-01-26(V2.1.0)
|
||||||
|
|
||||||
|
- 给地址选择器添加了一个方法(见方法4),提供数据源参数,支持外部传入地区数据源。
|
||||||
|
- 提示:要注意数据源格式,参考 BRCity.json。可以把 BRCity.json 文件的内容放到后台去维护,通过后台接口获取地区数据源(即 BRCity.json 文件的内容)。
|
||||||
|
|
||||||
|
#### 2018-01-25(V2.0.0)
|
||||||
|
|
||||||
|
- 更新了地址数据源(BRCity.plist),地区信息是2018年最新最全的,与微信的地区信息完全一致。
|
||||||
|
- 支持自定义默认选择地址(格式:@[@"浙江省", @"杭州市", @"西湖区"]),支持下次点击进入地址选择器时,默认地址为上次选择的结果。
|
||||||
|
- 修改了日期选择器、地址选择器、字符串选择器的接口方法(删除了之前的方法2)。
|
||||||
|
- 添加了地址选择器显示类型,支持3种显示:只显示省份、显示省份和城市、显示省市区。
|
||||||
|
|
||||||
|
#### 2018-01-05(V1.3.0)
|
||||||
|
|
||||||
|
- 添加取消选择的回调方法(点击背景或取消按钮会执行 `cancelBlock` )
|
||||||
|
- 合并了字符串选择器 数组数据源和plist数据源对应的方法,`dataSource` 参数支持两种类型:
|
||||||
|
|
||||||
|
#### 2018-01-02(V1.2.0)
|
||||||
|
|
||||||
|
- 添加支持自定义主题颜色的方法。
|
||||||
|
|
||||||
|
#### 2017-11-26(V1.1.0)
|
||||||
|
|
||||||
|
- 更换第三方依赖库。
|
||||||
|
- 用MJExtension 替换了 原来的YYModel,以前没有注意导入YYModel,同时又导入YYKit会导致重复导入而冲突(另外使用YYModel时,手动导入和pod导入 其中的头文件和方法名也不一样,所以很容易出错)。
|
||||||
|
|
||||||
|
#### 2017-11-16(V1.0.0)
|
||||||
|
|
||||||
|
- 初始版本!
|
||||||
|
|
||||||
|
# 许可证
|
||||||
|
|
||||||
|
BRPickerView 使用 MIT 许可证,详情见 LICENSE 文件。
|
||||||
1
Pods/Headers/Private/BRPickerView/BRAddressModel.h
generated
Symbolic link
1
Pods/Headers/Private/BRPickerView/BRAddressModel.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.h
|
||||||
1
Pods/Headers/Private/BRPickerView/BRAddressPickerView.h
generated
Symbolic link
1
Pods/Headers/Private/BRPickerView/BRAddressPickerView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.h
|
||||||
1
Pods/Headers/Private/BRPickerView/BRBaseView.h
generated
Symbolic link
1
Pods/Headers/Private/BRPickerView/BRBaseView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/Base/BRBaseView.h
|
||||||
1
Pods/Headers/Private/BRPickerView/BRDatePickerView+BR.h
generated
Symbolic link
1
Pods/Headers/Private/BRPickerView/BRDatePickerView+BR.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.h
|
||||||
1
Pods/Headers/Private/BRPickerView/BRDatePickerView.h
generated
Symbolic link
1
Pods/Headers/Private/BRPickerView/BRDatePickerView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.h
|
||||||
1
Pods/Headers/Private/BRPickerView/BRPickerStyle.h
generated
Symbolic link
1
Pods/Headers/Private/BRPickerView/BRPickerStyle.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/Base/BRPickerStyle.h
|
||||||
1
Pods/Headers/Private/BRPickerView/BRPickerView.h
generated
Symbolic link
1
Pods/Headers/Private/BRPickerView/BRPickerView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/BRPickerView.h
|
||||||
1
Pods/Headers/Private/BRPickerView/BRPickerViewMacro.h
generated
Symbolic link
1
Pods/Headers/Private/BRPickerView/BRPickerViewMacro.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/Base/BRPickerViewMacro.h
|
||||||
1
Pods/Headers/Private/BRPickerView/BRResultModel.h
generated
Symbolic link
1
Pods/Headers/Private/BRPickerView/BRResultModel.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/StringPickerView/BRResultModel.h
|
||||||
1
Pods/Headers/Private/BRPickerView/BRStringPickerView.h
generated
Symbolic link
1
Pods/Headers/Private/BRPickerView/BRStringPickerView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.h
|
||||||
1
Pods/Headers/Private/BRPickerView/NSBundle+BRPickerView.h
generated
Symbolic link
1
Pods/Headers/Private/BRPickerView/NSBundle+BRPickerView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.h
|
||||||
1
Pods/Headers/Private/BRPickerView/NSDate+BRPickerView.h
generated
Symbolic link
1
Pods/Headers/Private/BRPickerView/NSDate+BRPickerView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.h
|
||||||
1
Pods/Headers/Public/BRPickerView/BRAddressModel.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/BRAddressModel.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/AddressPickerView/BRAddressModel.h
|
||||||
1
Pods/Headers/Public/BRPickerView/BRAddressPickerView.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/BRAddressPickerView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.h
|
||||||
1
Pods/Headers/Public/BRPickerView/BRBaseView.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/BRBaseView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/Base/BRBaseView.h
|
||||||
1
Pods/Headers/Public/BRPickerView/BRDatePickerView+BR.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/BRDatePickerView+BR.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/DatePickerView/BRDatePickerView+BR.h
|
||||||
1
Pods/Headers/Public/BRPickerView/BRDatePickerView.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/BRDatePickerView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/DatePickerView/BRDatePickerView.h
|
||||||
1
Pods/Headers/Public/BRPickerView/BRPickerStyle.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/BRPickerStyle.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/Base/BRPickerStyle.h
|
||||||
1
Pods/Headers/Public/BRPickerView/BRPickerView-umbrella.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/BRPickerView-umbrella.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../Target Support Files/BRPickerView/BRPickerView-umbrella.h
|
||||||
1
Pods/Headers/Public/BRPickerView/BRPickerView.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/BRPickerView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/BRPickerView.h
|
||||||
1
Pods/Headers/Public/BRPickerView/BRPickerView.modulemap
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/BRPickerView.modulemap
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../Target Support Files/BRPickerView/BRPickerView.modulemap
|
||||||
1
Pods/Headers/Public/BRPickerView/BRPickerViewMacro.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/BRPickerViewMacro.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/Base/BRPickerViewMacro.h
|
||||||
1
Pods/Headers/Public/BRPickerView/BRResultModel.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/BRResultModel.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/StringPickerView/BRResultModel.h
|
||||||
1
Pods/Headers/Public/BRPickerView/BRStringPickerView.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/BRStringPickerView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/StringPickerView/BRStringPickerView.h
|
||||||
1
Pods/Headers/Public/BRPickerView/NSBundle+BRPickerView.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/NSBundle+BRPickerView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/Base/NSBundle+BRPickerView.h
|
||||||
1
Pods/Headers/Public/BRPickerView/NSDate+BRPickerView.h
generated
Symbolic link
1
Pods/Headers/Public/BRPickerView/NSDate+BRPickerView.h
generated
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../BRPickerView/BRPickerView/DatePickerView/NSDate+BRPickerView.h
|
||||||
17
Pods/Manifest.lock
generated
17
Pods/Manifest.lock
generated
@@ -10,6 +10,18 @@ PODS:
|
|||||||
- AMapTrack-NO-IDFA (1.4.2):
|
- AMapTrack-NO-IDFA (1.4.2):
|
||||||
- AMapFoundation-NO-IDFA (>= 1.6.4)
|
- AMapFoundation-NO-IDFA (>= 1.6.4)
|
||||||
- AMapLocation-NO-IDFA (>= 2.6.7)
|
- AMapLocation-NO-IDFA (>= 2.6.7)
|
||||||
|
- BRPickerView (2.8.1):
|
||||||
|
- BRPickerView/AddressPickerView (= 2.8.1)
|
||||||
|
- BRPickerView/Base (= 2.8.1)
|
||||||
|
- BRPickerView/DatePickerView (= 2.8.1)
|
||||||
|
- BRPickerView/StringPickerView (= 2.8.1)
|
||||||
|
- BRPickerView/AddressPickerView (2.8.1):
|
||||||
|
- BRPickerView/Base
|
||||||
|
- BRPickerView/Base (2.8.1)
|
||||||
|
- BRPickerView/DatePickerView (2.8.1):
|
||||||
|
- BRPickerView/Base
|
||||||
|
- BRPickerView/StringPickerView (2.8.1):
|
||||||
|
- BRPickerView/Base
|
||||||
- CocoaDebug (1.7.7)
|
- CocoaDebug (1.7.7)
|
||||||
- DDAutoUIKit_Private (0.1.3)
|
- DDAutoUIKit_Private (0.1.3)
|
||||||
- DDBasicControlsKit_Private/DDBaseAnimation/DDTransitionAnimation (0.3.2)
|
- DDBasicControlsKit_Private/DDBaseAnimation/DDTransitionAnimation (0.3.2)
|
||||||
@@ -282,6 +294,7 @@ PODS:
|
|||||||
- ZLPhotoBrowser/Core (4.4.3.2)
|
- ZLPhotoBrowser/Core (4.4.3.2)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
|
- BRPickerView
|
||||||
- CocoaDebug
|
- CocoaDebug
|
||||||
- DDAutoUIKit_Private
|
- DDAutoUIKit_Private
|
||||||
- DDCategoryKit_Private
|
- DDCategoryKit_Private
|
||||||
@@ -332,6 +345,7 @@ SPEC REPOS:
|
|||||||
- AMapNavi-NO-IDFA
|
- AMapNavi-NO-IDFA
|
||||||
- AMapSearch-NO-IDFA
|
- AMapSearch-NO-IDFA
|
||||||
- AMapTrack-NO-IDFA
|
- AMapTrack-NO-IDFA
|
||||||
|
- BRPickerView
|
||||||
- CocoaDebug
|
- CocoaDebug
|
||||||
- ESTabBarController-swift
|
- ESTabBarController-swift
|
||||||
- IQKeyboardManagerSwift
|
- IQKeyboardManagerSwift
|
||||||
@@ -355,6 +369,7 @@ SPEC CHECKSUMS:
|
|||||||
AMapNavi-NO-IDFA: 70c724400376bfadcb8ec08b9761f526096cfdb6
|
AMapNavi-NO-IDFA: 70c724400376bfadcb8ec08b9761f526096cfdb6
|
||||||
AMapSearch-NO-IDFA: 10cbd3ad7d122045a0c1f5760f6d46ff576ca918
|
AMapSearch-NO-IDFA: 10cbd3ad7d122045a0c1f5760f6d46ff576ca918
|
||||||
AMapTrack-NO-IDFA: 7109cf1867f5d6c407c8191492b1f73101e1682e
|
AMapTrack-NO-IDFA: 7109cf1867f5d6c407c8191492b1f73101e1682e
|
||||||
|
BRPickerView: 2531a2d4d0fea0b57a1c738de215af0f88863a2f
|
||||||
CocoaDebug: b38d31464b91a9775928f8667d114db07b136565
|
CocoaDebug: b38d31464b91a9775928f8667d114db07b136565
|
||||||
DDAutoUIKit_Private: 188066b4d13c8096676ddd9efa15974238f6dca3
|
DDAutoUIKit_Private: 188066b4d13c8096676ddd9efa15974238f6dca3
|
||||||
DDBasicControlsKit_Private: d3aebc505eaac273a8f6b85238662ad6e64a1a08
|
DDBasicControlsKit_Private: d3aebc505eaac273a8f6b85238662ad6e64a1a08
|
||||||
@@ -385,6 +400,6 @@ SPEC CHECKSUMS:
|
|||||||
SwiftEntryKit: 61b5fa36f34a97dd8013e48a7345bc4c4720be9a
|
SwiftEntryKit: 61b5fa36f34a97dd8013e48a7345bc4c4720be9a
|
||||||
ZLPhotoBrowser: 0563c2bfc7b247b65d023d646012f46cba94101b
|
ZLPhotoBrowser: 0563c2bfc7b247b65d023d646012f46cba94101b
|
||||||
|
|
||||||
PODFILE CHECKSUM: a50398c9fdc8f5753f43e8d3315d35e180ab0c05
|
PODFILE CHECKSUM: 9a2e6768eed0351abcabcf885507b3914d82edfd
|
||||||
|
|
||||||
COCOAPODS: 1.11.3
|
COCOAPODS: 1.11.3
|
||||||
|
|||||||
15497
Pods/Pods.xcodeproj/project.pbxproj
generated
15497
Pods/Pods.xcodeproj/project.pbxproj
generated
File diff suppressed because it is too large
Load Diff
58
Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/BRPickerView.xcscheme
generated
Normal file
58
Pods/Pods.xcodeproj/xcuserdata/zd.xcuserdatad/xcschemes/BRPickerView.xcscheme
generated
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1300"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "D505645C3F99EB1E8B6529D64D2C3E1C"
|
||||||
|
BuildableName = "libBRPickerView.a"
|
||||||
|
BlueprintName = "BRPickerView"
|
||||||
|
ReferencedContainer = "container:Pods.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
@@ -46,237 +46,244 @@
|
|||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>CocoaDebug.xcscheme</key>
|
<key>BRPickerView.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>7</integer>
|
<integer>7</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDAutoUIKit_Private.xcscheme</key>
|
<key>CocoaDebug.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>8</integer>
|
<integer>8</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDBasicControlsKit_Private-DDBaseViewController.xcscheme</key>
|
<key>DDAutoUIKit_Private.xcscheme</key>
|
||||||
<dict>
|
|
||||||
<key>isShown</key>
|
|
||||||
<false/>
|
|
||||||
<key>orderHint</key>
|
|
||||||
<integer>10</integer>
|
|
||||||
</dict>
|
|
||||||
<key>DDBasicControlsKit_Private.xcscheme</key>
|
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>9</integer>
|
<integer>9</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDCategoryKit_Private.xcscheme</key>
|
<key>DDBasicControlsKit_Private-DDBaseViewController.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>11</integer>
|
<integer>11</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDColorKit_Private.xcscheme</key>
|
<key>DDBasicControlsKit_Private.xcscheme</key>
|
||||||
|
<dict>
|
||||||
|
<key>isShown</key>
|
||||||
|
<false/>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>10</integer>
|
||||||
|
</dict>
|
||||||
|
<key>DDCategoryKit_Private.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>12</integer>
|
<integer>12</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDControlsKit_Private.xcscheme</key>
|
<key>DDColorKit_Private.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>13</integer>
|
<integer>13</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDFontKit_Private.xcscheme</key>
|
<key>DDControlsKit_Private.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>14</integer>
|
<integer>14</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDLogKit_Private.xcscheme</key>
|
<key>DDFontKit_Private.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>15</integer>
|
<integer>15</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDMAMapKit_Private-DDMAMapKit_Private.xcscheme</key>
|
<key>DDLogKit_Private.xcscheme</key>
|
||||||
<dict>
|
|
||||||
<key>isShown</key>
|
|
||||||
<false/>
|
|
||||||
<key>orderHint</key>
|
|
||||||
<integer>17</integer>
|
|
||||||
</dict>
|
|
||||||
<key>DDMAMapKit_Private.xcscheme</key>
|
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>16</integer>
|
<integer>16</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDNetworkingOfAlamofireKit_Private.xcscheme</key>
|
<key>DDMAMapKit_Private-DDMAMapKit_Private.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>18</integer>
|
<integer>18</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDProgressHUDKit_Private.xcscheme</key>
|
<key>DDMAMapKit_Private.xcscheme</key>
|
||||||
|
<dict>
|
||||||
|
<key>isShown</key>
|
||||||
|
<false/>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>17</integer>
|
||||||
|
</dict>
|
||||||
|
<key>DDNetworkingOfAlamofireKit_Private.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>19</integer>
|
<integer>19</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDTimerKit_Private.xcscheme</key>
|
<key>DDProgressHUDKit_Private.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>20</integer>
|
<integer>20</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDToastKit_Private.xcscheme</key>
|
<key>DDTimerKit_Private.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>21</integer>
|
<integer>21</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDWebImageKit_Private.xcscheme</key>
|
<key>DDToastKit_Private.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>22</integer>
|
<integer>22</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>DDZFPlayerKit_Private.xcscheme</key>
|
<key>DDWebImageKit_Private.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>23</integer>
|
<integer>23</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>ESTabBarController-swift.xcscheme</key>
|
<key>DDZFPlayerKit_Private.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>24</integer>
|
<integer>24</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>IQKeyboardManagerSwift.xcscheme</key>
|
<key>ESTabBarController-swift.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>25</integer>
|
<integer>25</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>JCore.xcscheme</key>
|
<key>IQKeyboardManagerSwift.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>26</integer>
|
<integer>26</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>JPush.xcscheme</key>
|
<key>JCore.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>27</integer>
|
<integer>27</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>JPushExtension.xcscheme</key>
|
<key>JPush.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>28</integer>
|
<integer>28</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>JXCategoryView.xcscheme</key>
|
<key>JPushExtension.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>29</integer>
|
<integer>29</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Kingfisher.xcscheme</key>
|
<key>JXCategoryView.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>30</integer>
|
<integer>30</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>MJRefresh.xcscheme</key>
|
<key>Kingfisher.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>31</integer>
|
<integer>31</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Pods-OrderScheduling.xcscheme</key>
|
<key>MJRefresh.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>32</integer>
|
<integer>32</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Pods-OrderSchedulingNotificationService.xcscheme</key>
|
<key>Pods-OrderScheduling.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>33</integer>
|
<integer>33</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>RxCocoa.xcscheme</key>
|
<key>Pods-OrderSchedulingNotificationService.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>34</integer>
|
<integer>34</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>RxRelay.xcscheme</key>
|
<key>RxCocoa.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>35</integer>
|
<integer>35</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>RxSwift.xcscheme</key>
|
<key>RxRelay.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>36</integer>
|
<integer>36</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SnapKit.xcscheme</key>
|
<key>RxSwift.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>37</integer>
|
<integer>37</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SwiftEntryKit.xcscheme</key>
|
<key>SnapKit.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>38</integer>
|
<integer>38</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>ZLPhotoBrowser.xcscheme</key>
|
<key>SwiftEntryKit.xcscheme</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>isShown</key>
|
<key>isShown</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>39</integer>
|
<integer>39</integer>
|
||||||
</dict>
|
</dict>
|
||||||
|
<key>ZLPhotoBrowser.xcscheme</key>
|
||||||
|
<dict>
|
||||||
|
<key>isShown</key>
|
||||||
|
<false/>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>40</integer>
|
||||||
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SuppressBuildableAutocreation</key>
|
<key>SuppressBuildableAutocreation</key>
|
||||||
<dict/>
|
<dict/>
|
||||||
|
|||||||
5
Pods/Target Support Files/BRPickerView/BRPickerView-dummy.m
generated
Normal file
5
Pods/Target Support Files/BRPickerView/BRPickerView-dummy.m
generated
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
@interface PodsDummy_BRPickerView : NSObject
|
||||||
|
@end
|
||||||
|
@implementation PodsDummy_BRPickerView
|
||||||
|
@end
|
||||||
12
Pods/Target Support Files/BRPickerView/BRPickerView-prefix.pch
generated
Normal file
12
Pods/Target Support Files/BRPickerView/BRPickerView-prefix.pch
generated
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#else
|
||||||
|
#ifndef FOUNDATION_EXPORT
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#define FOUNDATION_EXPORT extern "C"
|
||||||
|
#else
|
||||||
|
#define FOUNDATION_EXPORT extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
28
Pods/Target Support Files/BRPickerView/BRPickerView-umbrella.h
generated
Normal file
28
Pods/Target Support Files/BRPickerView/BRPickerView-umbrella.h
generated
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#ifdef __OBJC__
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#else
|
||||||
|
#ifndef FOUNDATION_EXPORT
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
#define FOUNDATION_EXPORT extern "C"
|
||||||
|
#else
|
||||||
|
#define FOUNDATION_EXPORT extern
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#import "BRPickerView.h"
|
||||||
|
#import "BRAddressModel.h"
|
||||||
|
#import "BRAddressPickerView.h"
|
||||||
|
#import "BRBaseView.h"
|
||||||
|
#import "BRPickerStyle.h"
|
||||||
|
#import "BRPickerViewMacro.h"
|
||||||
|
#import "NSBundle+BRPickerView.h"
|
||||||
|
#import "BRDatePickerView+BR.h"
|
||||||
|
#import "BRDatePickerView.h"
|
||||||
|
#import "NSDate+BRPickerView.h"
|
||||||
|
#import "BRResultModel.h"
|
||||||
|
#import "BRStringPickerView.h"
|
||||||
|
|
||||||
|
FOUNDATION_EXPORT double BRPickerViewVersionNumber;
|
||||||
|
FOUNDATION_EXPORT const unsigned char BRPickerViewVersionString[];
|
||||||
|
|
||||||
12
Pods/Target Support Files/BRPickerView/BRPickerView.debug.xcconfig
generated
Normal file
12
Pods/Target Support Files/BRPickerView/BRPickerView.debug.xcconfig
generated
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
|
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BRPickerView" "${PODS_ROOT}/Headers/Public"
|
||||||
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
PODS_ROOT = ${SRCROOT}
|
||||||
|
PODS_TARGET_SRCROOT = ${PODS_ROOT}/BRPickerView
|
||||||
|
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||||
|
SKIP_INSTALL = YES
|
||||||
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||||
6
Pods/Target Support Files/BRPickerView/BRPickerView.modulemap
generated
Normal file
6
Pods/Target Support Files/BRPickerView/BRPickerView.modulemap
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
module BRPickerView {
|
||||||
|
umbrella header "BRPickerView-umbrella.h"
|
||||||
|
|
||||||
|
export *
|
||||||
|
module * { export * }
|
||||||
|
}
|
||||||
12
Pods/Target Support Files/BRPickerView/BRPickerView.release.xcconfig
generated
Normal file
12
Pods/Target Support Files/BRPickerView/BRPickerView.release.xcconfig
generated
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
|
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/BRPickerView" "${PODS_ROOT}/Headers/Public"
|
||||||
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
|
PODS_ROOT = ${SRCROOT}
|
||||||
|
PODS_TARGET_SRCROOT = ${PODS_ROOT}/BRPickerView
|
||||||
|
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||||
|
SKIP_INSTALL = YES
|
||||||
|
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||||
@@ -49,6 +49,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
## BRPickerView
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 91renb
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
## DDAutoUIKit_Private
|
## DDAutoUIKit_Private
|
||||||
|
|
||||||
Copyright (c) 2023 DDIsFriend <DDIsFriend@163.com>
|
Copyright (c) 2023 DDIsFriend <DDIsFriend@163.com>
|
||||||
|
|||||||
@@ -96,6 +96,37 @@ THE SOFTWARE.
|
|||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
<string>PSGroupSpecifier</string>
|
<string>PSGroupSpecifier</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>FooterText</key>
|
||||||
|
<string>MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 91renb
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
</string>
|
||||||
|
<key>License</key>
|
||||||
|
<string>MIT</string>
|
||||||
|
<key>Title</key>
|
||||||
|
<string>BRPickerView</string>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>PSGroupSpecifier</string>
|
||||||
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>FooterText</key>
|
<key>FooterText</key>
|
||||||
<string>Copyright (c) 2023 DDIsFriend <DDIsFriend@163.com>
|
<string>Copyright (c) 2023 DDIsFriend <DDIsFriend@163.com>
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
${PODS_ROOT}/Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling-resources.sh
|
${PODS_ROOT}/Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling-resources.sh
|
||||||
${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle
|
${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle
|
||||||
${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle
|
${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle
|
||||||
|
${PODS_ROOT}/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.bundle
|
||||||
|
${PODS_ROOT}/BRPickerView/BRPickerView/Base/BRPickerView.bundle
|
||||||
${PODS_ROOT}/CocoaDebug/Sources/Resources/App.storyboard
|
${PODS_ROOT}/CocoaDebug/Sources/Resources/App.storyboard
|
||||||
${PODS_ROOT}/CocoaDebug/Sources/Resources/FileType/icon_file_type_7z.png
|
${PODS_ROOT}/CocoaDebug/Sources/Resources/FileType/icon_file_type_7z.png
|
||||||
${PODS_ROOT}/CocoaDebug/Sources/Resources/FileType/icon_file_type_7z@2x.png
|
${PODS_ROOT}/CocoaDebug/Sources/Resources/FileType/icon_file_type_7z@2x.png
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMapNavi.bundle
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMapNavi.bundle
|
||||||
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMap.bundle
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMap.bundle
|
||||||
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/BRAddressPickerView.bundle
|
||||||
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/BRPickerView.bundle
|
||||||
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/App.storyboardc
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/App.storyboardc
|
||||||
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/icon_file_type_7z.png
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/icon_file_type_7z.png
|
||||||
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/icon_file_type_7z@2x.png
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/icon_file_type_7z@2x.png
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
${PODS_ROOT}/Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling-resources.sh
|
${PODS_ROOT}/Target Support Files/Pods-OrderScheduling/Pods-OrderScheduling-resources.sh
|
||||||
${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle
|
${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle
|
||||||
${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle
|
${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle
|
||||||
|
${PODS_ROOT}/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.bundle
|
||||||
|
${PODS_ROOT}/BRPickerView/BRPickerView/Base/BRPickerView.bundle
|
||||||
${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private/DDBaseViewController.bundle
|
${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private/DDBaseViewController.bundle
|
||||||
${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private/DDMAMapKit_Private.bundle
|
${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private/DDMAMapKit_Private.bundle
|
||||||
${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle
|
${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMapNavi.bundle
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMapNavi.bundle
|
||||||
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMap.bundle
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMap.bundle
|
||||||
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/BRAddressPickerView.bundle
|
||||||
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/BRPickerView.bundle
|
||||||
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/DDBaseViewController.bundle
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/DDBaseViewController.bundle
|
||||||
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/DDMAMapKit_Private.bundle
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/DDMAMapKit_Private.bundle
|
||||||
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ZFPlayer.bundle
|
${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ZFPlayer.bundle
|
||||||
|
|||||||
@@ -99,6 +99,8 @@ EOM
|
|||||||
if [[ "$CONFIGURATION" == "Debug" ]]; then
|
if [[ "$CONFIGURATION" == "Debug" ]]; then
|
||||||
install_resource "${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle"
|
install_resource "${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle"
|
||||||
install_resource "${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle"
|
install_resource "${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle"
|
||||||
|
install_resource "${PODS_ROOT}/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.bundle"
|
||||||
|
install_resource "${PODS_ROOT}/BRPickerView/BRPickerView/Base/BRPickerView.bundle"
|
||||||
install_resource "${PODS_ROOT}/CocoaDebug/Sources/Resources/App.storyboard"
|
install_resource "${PODS_ROOT}/CocoaDebug/Sources/Resources/App.storyboard"
|
||||||
install_resource "${PODS_ROOT}/CocoaDebug/Sources/Resources/FileType/icon_file_type_7z.png"
|
install_resource "${PODS_ROOT}/CocoaDebug/Sources/Resources/FileType/icon_file_type_7z.png"
|
||||||
install_resource "${PODS_ROOT}/CocoaDebug/Sources/Resources/FileType/icon_file_type_7z@2x.png"
|
install_resource "${PODS_ROOT}/CocoaDebug/Sources/Resources/FileType/icon_file_type_7z@2x.png"
|
||||||
@@ -285,6 +287,8 @@ fi
|
|||||||
if [[ "$CONFIGURATION" == "Release" ]]; then
|
if [[ "$CONFIGURATION" == "Release" ]]; then
|
||||||
install_resource "${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle"
|
install_resource "${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMapNavi.bundle"
|
||||||
install_resource "${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle"
|
install_resource "${PODS_ROOT}/AMapNavi-NO-IDFA/AMapNaviKit.framework/AMap.bundle"
|
||||||
|
install_resource "${PODS_ROOT}/BRPickerView/BRPickerView/AddressPickerView/BRAddressPickerView.bundle"
|
||||||
|
install_resource "${PODS_ROOT}/BRPickerView/BRPickerView/Base/BRPickerView.bundle"
|
||||||
install_resource "${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private/DDBaseViewController.bundle"
|
install_resource "${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private/DDBaseViewController.bundle"
|
||||||
install_resource "${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private/DDMAMapKit_Private.bundle"
|
install_resource "${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private/DDMAMapKit_Private.bundle"
|
||||||
install_resource "${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle"
|
install_resource "${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ControlView/ZFPlayer.bundle"
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
|||||||
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
|
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapNavi-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/AMapTrack-NO-IDFA" "${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapNavi-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/AMapTrack-NO-IDFA" "${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CocoaDebug" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDTimerKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers"
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/CocoaDebug" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDTimerKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers"
|
||||||
LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaDebug" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDCategoryKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDWebImageKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDZFPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXCategoryView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaDebug" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDCategoryKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDWebImageKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDZFPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXCategoryView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||||
OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/CocoaDebug/CocoaDebug.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDTimerKit_Private/DDTimerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/CocoaDebug/CocoaDebug.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDTimerKit_Private/DDTimerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
||||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"Alamofire" -l"CocoaDebug" -l"DDAutoUIKit_Private" -l"DDBasicControlsKit_Private" -l"DDCategoryKit_Private" -l"DDColorKit_Private" -l"DDControlsKit_Private" -l"DDFontKit_Private" -l"DDLogKit_Private" -l"DDMAMapKit_Private" -l"DDNetworkingOfAlamofireKit_Private" -l"DDProgressHUDKit_Private" -l"DDTimerKit_Private" -l"DDToastKit_Private" -l"DDWebImageKit_Private" -l"DDZFPlayerKit_Private" -l"ESTabBarController-swift" -l"IQKeyboardManagerSwift" -l"JCore" -l"JPush" -l"JXCategoryView" -l"Kingfisher" -l"MJRefresh" -l"RxCocoa" -l"RxRelay" -l"RxSwift" -l"SnapKit" -l"SwiftEntryKit" -l"ZLPhotoBrowser" -l"bz2" -l"c++" -l"resolv" -l"sqlite3" -l"swiftCoreGraphics" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapNaviKit" -framework "AMapSearchKit" -framework "AMapTrackKit" -framework "AVFoundation" -framework "Accelerate" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "IJKMediaFramework" -framework "ImageIO" -framework "JavaScriptCore" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "OpenGLES" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "QuickLook" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "SwiftUI" -weak_framework "UserNotifications"
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"Alamofire" -l"BRPickerView" -l"CocoaDebug" -l"DDAutoUIKit_Private" -l"DDBasicControlsKit_Private" -l"DDCategoryKit_Private" -l"DDColorKit_Private" -l"DDControlsKit_Private" -l"DDFontKit_Private" -l"DDLogKit_Private" -l"DDMAMapKit_Private" -l"DDNetworkingOfAlamofireKit_Private" -l"DDProgressHUDKit_Private" -l"DDTimerKit_Private" -l"DDToastKit_Private" -l"DDWebImageKit_Private" -l"DDZFPlayerKit_Private" -l"ESTabBarController-swift" -l"IQKeyboardManagerSwift" -l"JCore" -l"JPush" -l"JXCategoryView" -l"Kingfisher" -l"MJRefresh" -l"RxCocoa" -l"RxRelay" -l"RxSwift" -l"SnapKit" -l"SwiftEntryKit" -l"ZLPhotoBrowser" -l"bz2" -l"c++" -l"resolv" -l"sqlite3" -l"swiftCoreGraphics" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapNaviKit" -framework "AMapSearchKit" -framework "AMapTrackKit" -framework "AVFoundation" -framework "Accelerate" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "IJKMediaFramework" -framework "ImageIO" -framework "JavaScriptCore" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "OpenGLES" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "QuickLook" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "SwiftUI" -weak_framework "UserNotifications"
|
||||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/CocoaDebug/CocoaDebug.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDTimerKit_Private/DDTimerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/CocoaDebug/CocoaDebug.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDTimerKit_Private/DDTimerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
||||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
|||||||
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
|
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapNavi-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/AMapTrack-NO-IDFA" "${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AMapFoundation-NO-IDFA" "${PODS_ROOT}/AMapLocation-NO-IDFA" "${PODS_ROOT}/AMapNavi-NO-IDFA" "${PODS_ROOT}/AMapSearch-NO-IDFA" "${PODS_ROOT}/AMapTrack-NO-IDFA" "${PODS_ROOT}/DDZFPlayerKit_Private/DDZFPlayerKit_Private/Classes/ijkplayer" "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CocoaDebug" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDTimerKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers"
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/CocoaDebug" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDTimerKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers"
|
||||||
LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDCategoryKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDWebImageKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDZFPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXCategoryView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
LIBRARY_SEARCH_PATHS = $(inherited) "${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDBasicControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDCategoryKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDMAMapKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDTimerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDWebImageKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/DDZFPlayerKit_Private" "${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXCategoryView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit" "${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||||
OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDTimerKit_Private/DDTimerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDTimerKit_Private/DDTimerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
||||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"Alamofire" -l"DDAutoUIKit_Private" -l"DDBasicControlsKit_Private" -l"DDCategoryKit_Private" -l"DDColorKit_Private" -l"DDControlsKit_Private" -l"DDFontKit_Private" -l"DDLogKit_Private" -l"DDMAMapKit_Private" -l"DDNetworkingOfAlamofireKit_Private" -l"DDProgressHUDKit_Private" -l"DDTimerKit_Private" -l"DDToastKit_Private" -l"DDWebImageKit_Private" -l"DDZFPlayerKit_Private" -l"ESTabBarController-swift" -l"IQKeyboardManagerSwift" -l"JCore" -l"JPush" -l"JXCategoryView" -l"Kingfisher" -l"MJRefresh" -l"RxCocoa" -l"RxRelay" -l"RxSwift" -l"SnapKit" -l"SwiftEntryKit" -l"ZLPhotoBrowser" -l"bz2" -l"c++" -l"resolv" -l"sqlite3" -l"swiftCoreGraphics" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapNaviKit" -framework "AMapSearchKit" -framework "AMapTrackKit" -framework "AVFoundation" -framework "Accelerate" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "IJKMediaFramework" -framework "ImageIO" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "OpenGLES" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "SwiftUI" -weak_framework "UserNotifications"
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"Alamofire" -l"BRPickerView" -l"DDAutoUIKit_Private" -l"DDBasicControlsKit_Private" -l"DDCategoryKit_Private" -l"DDColorKit_Private" -l"DDControlsKit_Private" -l"DDFontKit_Private" -l"DDLogKit_Private" -l"DDMAMapKit_Private" -l"DDNetworkingOfAlamofireKit_Private" -l"DDProgressHUDKit_Private" -l"DDTimerKit_Private" -l"DDToastKit_Private" -l"DDWebImageKit_Private" -l"DDZFPlayerKit_Private" -l"ESTabBarController-swift" -l"IQKeyboardManagerSwift" -l"JCore" -l"JPush" -l"JXCategoryView" -l"Kingfisher" -l"MJRefresh" -l"RxCocoa" -l"RxRelay" -l"RxSwift" -l"SnapKit" -l"SwiftEntryKit" -l"ZLPhotoBrowser" -l"bz2" -l"c++" -l"resolv" -l"sqlite3" -l"swiftCoreGraphics" -l"z" -framework "AMapFoundationKit" -framework "AMapLocationKit" -framework "AMapNaviKit" -framework "AMapSearchKit" -framework "AMapTrackKit" -framework "AVFoundation" -framework "Accelerate" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "CoreVideo" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "IJKMediaFramework" -framework "ImageIO" -framework "MapKit" -framework "MediaPlayer" -framework "MobileCoreServices" -framework "OpenGLES" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "VideoToolbox" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "SwiftUI" -weak_framework "UserNotifications"
|
||||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDTimerKit_Private/DDTimerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDAutoUIKit_Private/DDAutoUIKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDColorKit_Private/DDColorKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDControlsKit_Private/DDControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDFontKit_Private/DDFontKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDLogKit_Private/DDLogKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDNetworkingOfAlamofireKit_Private/DDNetworkingOfAlamofireKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDProgressHUDKit_Private/DDProgressHUDKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DDToastKit_Private/DDToastKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ESTabBarController-swift/ESTabBarController_swift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftEntryKit/SwiftEntryKit.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZLPhotoBrowser/ZLPhotoBrowser.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/BRPickerView/BRPickerView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private/DDBasicControlsKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDCategoryKit_Private/DDCategoryKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDMAMapKit_Private/DDMAMapKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDTimerKit_Private/DDTimerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDWebImageKit_Private/DDWebImageKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private/DDZFPlayerKit_Private.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/JXCategoryView/JXCategoryView.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/MJRefresh/MJRefresh.modulemap"
|
||||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||||
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush" "${PODS_ROOT}/JPushExtension"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush" "${PODS_ROOT}/JPushExtension"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CocoaDebug" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDTimerKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension/Headers"
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/CocoaDebug" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDTimerKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension/Headers"
|
||||||
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension"
|
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension"
|
||||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"JCore" -l"JPush" -l"JPushExtension" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "UserNotifications"
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"JCore" -l"JPush" -l"JPushExtension" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "UserNotifications"
|
||||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush" "${PODS_ROOT}/JPushExtension"
|
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/JCore" "${PODS_ROOT}/JPush" "${PODS_ROOT}/JPushExtension"
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CocoaDebug" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDTimerKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension/Headers"
|
HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BRPickerView" "${PODS_ROOT}/Headers/Public/CocoaDebug" "${PODS_ROOT}/Headers/Public/DDBasicControlsKit_Private" "${PODS_ROOT}/Headers/Public/DDCategoryKit_Private" "${PODS_ROOT}/Headers/Public/DDLogKit_Private" "${PODS_ROOT}/Headers/Public/DDMAMapKit_Private" "${PODS_ROOT}/Headers/Public/DDProgressHUDKit_Private" "${PODS_ROOT}/Headers/Public/DDTimerKit_Private" "${PODS_ROOT}/Headers/Public/DDWebImageKit_Private" "${PODS_ROOT}/Headers/Public/DDZFPlayerKit_Private" "${PODS_ROOT}/Headers/Public/JXCategoryView" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RxCocoa" "${PODS_ROOT}/Headers/Public/ZLPhotoBrowser" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension/Headers"
|
||||||
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension"
|
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/JCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPush" "${PODS_XCFRAMEWORKS_BUILD_DIR}/JPushExtension"
|
||||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"JCore" -l"JPush" -l"JPushExtension" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "UserNotifications"
|
OTHER_LDFLAGS = $(inherited) -ObjC -l"JCore" -l"JPush" -l"JPushExtension" -l"resolv" -l"z" -framework "CFNetwork" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreTelephony" -framework "Foundation" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" -weak_framework "AppTrackingTransparency" -weak_framework "UserNotifications"
|
||||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||||
|
|||||||
Reference in New Issue
Block a user