Pārlūkot izejas kodu

1.创建Common Editor Enum选择和排序控制器。

Pen Li 8 gadi atpakaļ
vecāks
revīzija
0942aae63d

+ 43 - 0
RedAnt ERP Mobile/HMLG Mobile.xcodeproj/project.pbxproj

@@ -59,6 +59,12 @@
 		42BEF3A41E8A4D0700632AB6 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42BEF3A31E8A4D0700632AB6 /* CoreData.framework */; };
 		42D587B81F789731006B13F5 /* HWWeakTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 42D587B71F789731006B13F5 /* HWWeakTimer.m */; };
 		42D587BB1F7898F7006B13F5 /* ModelDescriptionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42D587BA1F7898F7006B13F5 /* ModelDescriptionController.m */; };
+		42EC5FEE1FA1D84D00F8FAA4 /* FileCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 42EC5FEC1FA1D84D00F8FAA4 /* FileCache.m */; };
+		42EC5FEF1FA1D84D00F8FAA4 /* RAConvertor.m in Sources */ = {isa = PBXBuildFile; fileRef = 42EC5FED1FA1D84D00F8FAA4 /* RAConvertor.m */; };
+		42EC5FF81FA1D86300F8FAA4 /* EnumModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 42EC5FF21FA1D86300F8FAA4 /* EnumModel.m */; };
+		42EC5FF91FA1D86300F8FAA4 /* EnumSelectAndSort.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 42EC5FF31FA1D86300F8FAA4 /* EnumSelectAndSort.storyboard */; };
+		42EC5FFA1FA1D86300F8FAA4 /* EnumSelectAndSortCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42EC5FF51FA1D86300F8FAA4 /* EnumSelectAndSortCell.m */; };
+		42EC5FFB1FA1D86300F8FAA4 /* EnumSelectAndSortViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42EC5FF71FA1D86300F8FAA4 /* EnumSelectAndSortViewController.m */; };
 		42F9FAD71F8C5A8700D9C781 /* NetworkUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 42F9FAD31F8C5A8600D9C781 /* NetworkUtils.m */; };
 		42F9FAD81F8C5A8700D9C781 /* RANetworkTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 42F9FAD61F8C5A8600D9C781 /* RANetworkTaskDelegate.m */; };
 		715002021D13CDBE00F5927F /* BundleDetailButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 715002011D13CDBE00F5927F /* BundleDetailButton.m */; };
@@ -354,6 +360,17 @@
 		42D587B71F789731006B13F5 /* HWWeakTimer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HWWeakTimer.m; path = common/AutoScrollImage/HWWeakTimer.m; sourceTree = SOURCE_ROOT; };
 		42D587B91F7898F7006B13F5 /* ModelDescriptionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ModelDescriptionController.h; path = common/Functions/modelDetail/ModelDescriptionController.h; sourceTree = SOURCE_ROOT; };
 		42D587BA1F7898F7006B13F5 /* ModelDescriptionController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ModelDescriptionController.m; path = common/Functions/modelDetail/ModelDescriptionController.m; sourceTree = SOURCE_ROOT; };
+		42EC5FEA1FA1D84C00F8FAA4 /* FileCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileCache.h; path = ../../common/FileCache.h; sourceTree = "<group>"; };
+		42EC5FEB1FA1D84C00F8FAA4 /* RAConvertor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RAConvertor.h; path = ../../common/RAConvertor.h; sourceTree = "<group>"; };
+		42EC5FEC1FA1D84D00F8FAA4 /* FileCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FileCache.m; path = ../../common/FileCache.m; sourceTree = "<group>"; };
+		42EC5FED1FA1D84D00F8FAA4 /* RAConvertor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RAConvertor.m; path = ../../common/RAConvertor.m; sourceTree = "<group>"; };
+		42EC5FF11FA1D86300F8FAA4 /* EnumModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumModel.h; sourceTree = "<group>"; };
+		42EC5FF21FA1D86300F8FAA4 /* EnumModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnumModel.m; sourceTree = "<group>"; };
+		42EC5FF31FA1D86300F8FAA4 /* EnumSelectAndSort.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = EnumSelectAndSort.storyboard; sourceTree = "<group>"; };
+		42EC5FF41FA1D86300F8FAA4 /* EnumSelectAndSortCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumSelectAndSortCell.h; sourceTree = "<group>"; };
+		42EC5FF51FA1D86300F8FAA4 /* EnumSelectAndSortCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnumSelectAndSortCell.m; sourceTree = "<group>"; };
+		42EC5FF61FA1D86300F8FAA4 /* EnumSelectAndSortViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumSelectAndSortViewController.h; sourceTree = "<group>"; };
+		42EC5FF71FA1D86300F8FAA4 /* EnumSelectAndSortViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnumSelectAndSortViewController.m; sourceTree = "<group>"; };
 		42F9FAD31F8C5A8600D9C781 /* NetworkUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NetworkUtils.m; path = ../../common/NetworkUtils.m; sourceTree = "<group>"; };
 		42F9FAD41F8C5A8600D9C781 /* NetworkUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkUtils.h; path = ../../common/NetworkUtils.h; sourceTree = "<group>"; };
 		42F9FAD51F8C5A8600D9C781 /* RANetworkTaskDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RANetworkTaskDelegate.h; path = ../../common/upload/RANetworkTaskDelegate.h; sourceTree = "<group>"; };
@@ -999,6 +1016,21 @@
 			name = Frameworks;
 			sourceTree = "<group>";
 		};
+		42EC5FF01FA1D86200F8FAA4 /* EnumSelectAndSort */ = {
+			isa = PBXGroup;
+			children = (
+				42EC5FF11FA1D86300F8FAA4 /* EnumModel.h */,
+				42EC5FF21FA1D86300F8FAA4 /* EnumModel.m */,
+				42EC5FF31FA1D86300F8FAA4 /* EnumSelectAndSort.storyboard */,
+				42EC5FF41FA1D86300F8FAA4 /* EnumSelectAndSortCell.h */,
+				42EC5FF51FA1D86300F8FAA4 /* EnumSelectAndSortCell.m */,
+				42EC5FF61FA1D86300F8FAA4 /* EnumSelectAndSortViewController.h */,
+				42EC5FF71FA1D86300F8FAA4 /* EnumSelectAndSortViewController.m */,
+			);
+			name = EnumSelectAndSort;
+			path = common/CommonEditor/EnumSelectAndSort;
+			sourceTree = SOURCE_ROOT;
+		};
 		7183E83B1CF2913E00524787 = {
 			isa = PBXGroup;
 			children = (
@@ -1133,6 +1165,10 @@
 		7183E8931CF29F3900524787 /* utils */ = {
 			isa = PBXGroup;
 			children = (
+				42EC5FEA1FA1D84C00F8FAA4 /* FileCache.h */,
+				42EC5FEC1FA1D84D00F8FAA4 /* FileCache.m */,
+				42EC5FEB1FA1D84C00F8FAA4 /* RAConvertor.h */,
+				42EC5FED1FA1D84D00F8FAA4 /* RAConvertor.m */,
 				42D587B61F789731006B13F5 /* HWWeakTimer.h */,
 				42D587B71F789731006B13F5 /* HWWeakTimer.m */,
 				42BEF3631E8A4C7D00632AB6 /* GoogleAnalytics */,
@@ -1256,6 +1292,7 @@
 				7183E8EC1CF29F4500524787 /* MonthPickerViewController.m */,
 				7183E8ED1CF29F4500524787 /* SRMonthPicker.h */,
 				7183E8EE1CF29F4500524787 /* SRMonthPicker.m */,
+				42EC5FF01FA1D86200F8FAA4 /* EnumSelectAndSort */,
 			);
 			name = CommonEditor;
 			sourceTree = "<group>";
@@ -1799,6 +1836,7 @@
 				7183EA441CF2A06600524787 /* Main.storyboard in Resources */,
 				71C1D8201F45574200CEA1C9 /* PhotoList.storyboard in Resources */,
 				7183EA411CF2A04D00524787 /* OLM.storyboard in Resources */,
+				42EC5FF91FA1D86300F8FAA4 /* EnumSelectAndSort.storyboard in Resources */,
 				7183EA041CF29FCB00524787 /* customer_info_template.json in Resources */,
 				7183E9241CF29F4500524787 /* include in Resources */,
 				719562441CF6937F00C74A49 /* default_appearance.json in Resources */,
@@ -1847,6 +1885,7 @@
 				4289806A1E24A9DE005F1BD8 /* OfflineUnlockViewController.m in Sources */,
 				42F9FAD81F8C5A8700D9C781 /* RANetworkTaskDelegate.m in Sources */,
 				7183E89D1CF29F3900524787 /* qrinput.c in Sources */,
+				42EC5FEF1FA1D84D00F8FAA4 /* RAConvertor.m in Sources */,
 				7183E9061CF29F4500524787 /* NIDropDown.m in Sources */,
 				428980911E24B2C2005F1BD8 /* RAPDFPage.m in Sources */,
 				7183EA0A1CF29FCB00524787 /* DetailKVCell.m in Sources */,
@@ -1879,6 +1918,7 @@
 				7183E9131CF29F4500524787 /* CommonEditorCellLabel.m in Sources */,
 				7183EA111CF29FCB00524787 /* HomeTableViewCellTopic.m in Sources */,
 				42BEF39A1E8A4C7D00632AB6 /* README.md in Sources */,
+				42EC5FFA1FA1D86300F8FAA4 /* EnumSelectAndSortCell.m in Sources */,
 				7195623F1CF580E800C74A49 /* DefaultTableHeaderView.m in Sources */,
 				7183EA1F1CF29FCB00524787 /* PDFListViewController.m in Sources */,
 				7183E8A81CF29F3900524787 /* iSalesDB.m in Sources */,
@@ -1915,6 +1955,7 @@
 				4289806F1E24AEA6005F1BD8 /* Singleton.m in Sources */,
 				71D30A2A1CFC0EDD006F9477 /* DefaultImageButton.m in Sources */,
 				7183E8941CF29F3900524787 /* ioapi.c in Sources */,
+				42EC5FFB1FA1D86300F8FAA4 /* EnumSelectAndSortViewController.m in Sources */,
 				7183E8A61CF29F3900524787 /* Reachability.m in Sources */,
 				7183EA6D1CF2B05C00524787 /* NSData+Base64.m in Sources */,
 				7183E9F91CF29FCB00524787 /* RATreeView+Enums.m in Sources */,
@@ -1954,6 +1995,7 @@
 				7183EA1A1CF29FCB00524787 /* OrderListViewController.m in Sources */,
 				7183E91A1CF29F4500524787 /* DatePickerViewController.m in Sources */,
 				7183E8491CF2913E00524787 /* main.m in Sources */,
+				42EC5FF81FA1D86300F8FAA4 /* EnumModel.m in Sources */,
 				42BEF3971E8A4C7D00632AB6 /* README.md in Sources */,
 				42BEF39D1E8A4C7D00632AB6 /* GTMNSData+zlib.m in Sources */,
 				7183E9E91CF29FCB00524787 /* BundleModelViewController.m in Sources */,
@@ -1994,6 +2036,7 @@
 				7183E8951CF29F3900524787 /* mztools.c in Sources */,
 				7183EA301CF29FCB00524787 /* PopupNavigationController.m in Sources */,
 				7183E9041CF29F4500524787 /* ImageUploadViewController.m in Sources */,
+				42EC5FEE1FA1D84D00F8FAA4 /* FileCache.m in Sources */,
 				7183E9F11CF29FCB00524787 /* CategorySearchFilterViewController.m in Sources */,
 				7183E9F01CF29FCB00524787 /* CategoryCellSmall.m in Sources */,
 				7183EA241CF29FCB00524787 /* ScannerViewController.m in Sources */,

BIN
RedAnt ERP Mobile/RedAnt ERP Mobile.xcworkspace/xcuserdata/macmini1.xcuserdatad/UserInterfaceState.xcuserstate


+ 17 - 0
RedAnt ERP Mobile/common/CommonEditor/CommonEditorViewController.m

@@ -45,6 +45,7 @@
 
 #import "FileCache.h"
 #import "RAConvertor.h"
+#import "EnumSelectAndSortViewController.h"
 
 
 
@@ -4057,6 +4058,22 @@
         //        NSString* required =[item_json valueForKey:@"required"];
         NSString* title = [item_json valueForKey:@"aname"];
         
+        BOOL sort = [[item_json objectForKey:@"sort"] boolValue];
+        if (sort) {
+            
+            EnumSelectAndSortViewController *vc = [[UIStoryboard storyboardWithName:@"EnumSelectAndSort" bundle:nil] instantiateViewControllerWithIdentifier:@"EnumSelectAndSortViewController"];
+            vc.title = title;
+            [vc setEnumDataSource:cadedate_json];
+            vc.indexPath = indexPath;
+            __weak typeof(self) weakSelf = self;
+            vc.returnBlock = ^(NSDictionary *returnValue, NSIndexPath *idxPath) {
+                [weakSelf EnumValueChanged:[returnValue mutableCopy] indexPath:idxPath];
+            };
+            
+            [self.navigationController pushViewController:vc animated:YES];
+            
+            return nil;
+        }
         
         int max_select = [[item_json valueForKey:@"max"] intValue];
         

+ 20 - 0
RedAnt ERP Mobile/common/CommonEditor/EnumSelectAndSort/EnumModel.h

@@ -0,0 +1,20 @@
+//
+//  EnumModel.h
+//  enumsort
+//
+//  Created by Jack on 2017/10/26.
+//  Copyright © 2017年 Jack. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface EnumModel : NSObject
+
+@property (nonatomic,assign) BOOL check;
+@property (nonatomic,assign) NSInteger value_id;
+@property (nonatomic,copy) NSString *value;
+@property (nonatomic,assign) NSInteger sort_id;
+
+- (void)setJsonValue:(NSDictionary *)json forSortId:(NSInteger)sortId;
+
+@end

+ 22 - 0
RedAnt ERP Mobile/common/CommonEditor/EnumSelectAndSort/EnumModel.m

@@ -0,0 +1,22 @@
+//
+//  EnumModel.m
+//  enumsort
+//
+//  Created by Jack on 2017/10/26.
+//  Copyright © 2017年 Jack. All rights reserved.
+//
+
+#import "EnumModel.h"
+
+@implementation EnumModel
+
+- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
+    
+}
+
+- (void)setJsonValue:(NSDictionary *)json forSortId:(NSInteger)sortId {
+    [self setValuesForKeysWithDictionary:json];
+    self.sort_id = sortId;
+}
+
+@end

+ 108 - 0
RedAnt ERP Mobile/common/CommonEditor/EnumSelectAndSort/EnumSelectAndSort.storyboard

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13196" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13173"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--Enum Select And Sort View Controller-->
+        <scene sceneID="TdG-e2-41f">
+            <objects>
+                <viewController storyboardIdentifier="EnumSelectAndSortViewController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="WGG-2g-TEC" customClass="EnumSelectAndSortViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="2f4-JU-yu5"/>
+                        <viewControllerLayoutGuide type="bottom" id="gJo-4E-M4C"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="MrG-Wj-VYV">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="Ct6-5h-QWQ">
+                                <rect key="frame" x="0.0" y="76" width="375" height="591"/>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                                <prototypes>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="EnumSelectAndSortCell" rowHeight="60" id="g3N-ui-czx" customClass="EnumSelectAndSortCell">
+                                        <rect key="frame" x="0.0" y="28" width="375" height="60"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="g3N-ui-czx" id="OHM-L7-XcY">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="59.5"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8mU-R4-Mdm">
+                                                    <rect key="frame" x="10" y="0.0" width="42" height="59.5"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="check_0" highlightedImage="check_1" translatesAutoresizingMaskIntoConstraints="NO" id="E5c-wk-DKK">
+                                                    <rect key="frame" x="340" y="17.5" width="25" height="25"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="25" id="5nG-iR-itN"/>
+                                                        <constraint firstAttribute="height" constant="25" id="d8d-VF-NCC"/>
+                                                    </constraints>
+                                                </imageView>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="8mU-R4-Mdm" firstAttribute="height" secondItem="OHM-L7-XcY" secondAttribute="height" id="0hi-Pw-0xJ"/>
+                                                <constraint firstAttribute="trailing" secondItem="E5c-wk-DKK" secondAttribute="trailing" constant="10" id="8Hz-bf-IBg"/>
+                                                <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="8mU-R4-Mdm" secondAttribute="trailing" constant="50" id="C8z-Fd-JAU"/>
+                                                <constraint firstItem="E5c-wk-DKK" firstAttribute="centerY" secondItem="OHM-L7-XcY" secondAttribute="centerY" id="ace-hN-agS"/>
+                                                <constraint firstItem="8mU-R4-Mdm" firstAttribute="top" secondItem="OHM-L7-XcY" secondAttribute="top" id="gMs-Aj-Bwj"/>
+                                                <constraint firstItem="8mU-R4-Mdm" firstAttribute="leading" secondItem="OHM-L7-XcY" secondAttribute="leading" constant="10" id="u7p-De-eXr"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                        <connections>
+                                            <outlet property="enumSelectionView" destination="E5c-wk-DKK" id="VHN-6M-zM0"/>
+                                            <outlet property="enumValueLabel" destination="8mU-R4-Mdm" id="Gxi-kG-q9G"/>
+                                        </connections>
+                                    </tableViewCell>
+                                </prototypes>
+                                <connections>
+                                    <outlet property="dataSource" destination="WGG-2g-TEC" id="UG0-Jh-N9d"/>
+                                    <outlet property="delegate" destination="WGG-2g-TEC" id="9eL-Ce-Ubk"/>
+                                </connections>
+                            </tableView>
+                            <searchBar contentMode="redraw" placeholder="search" translatesAutoresizingMaskIntoConstraints="NO" id="ZYh-Tv-EsJ">
+                                <rect key="frame" x="0.0" y="20" width="375" height="56"/>
+                                <offsetWrapper key="searchFieldBackgroundPositionAdjustment" horizontal="0.0" vertical="0.0"/>
+                                <textInputTraits key="textInputTraits" returnKeyType="search"/>
+                                <scopeButtonTitles>
+                                    <string>Title</string>
+                                    <string>Title</string>
+                                </scopeButtonTitles>
+                                <connections>
+                                    <outlet property="delegate" destination="WGG-2g-TEC" id="VHV-pJ-9qP"/>
+                                </connections>
+                            </searchBar>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                        <constraints>
+                            <constraint firstItem="ZYh-Tv-EsJ" firstAttribute="top" secondItem="2f4-JU-yu5" secondAttribute="bottom" id="CtC-qB-gfR"/>
+                            <constraint firstItem="Ct6-5h-QWQ" firstAttribute="top" secondItem="ZYh-Tv-EsJ" secondAttribute="bottom" id="G8B-bZ-yNa"/>
+                            <constraint firstItem="Ct6-5h-QWQ" firstAttribute="leading" secondItem="MrG-Wj-VYV" secondAttribute="leading" id="JEB-XM-7rO"/>
+                            <constraint firstItem="gJo-4E-M4C" firstAttribute="top" secondItem="Ct6-5h-QWQ" secondAttribute="bottom" id="KHm-su-pw0"/>
+                            <constraint firstItem="ZYh-Tv-EsJ" firstAttribute="leading" secondItem="MrG-Wj-VYV" secondAttribute="leading" id="RX1-8x-zce"/>
+                            <constraint firstAttribute="trailing" secondItem="Ct6-5h-QWQ" secondAttribute="trailing" id="S3N-eU-ZCf"/>
+                            <constraint firstItem="Ct6-5h-QWQ" firstAttribute="centerX" secondItem="MrG-Wj-VYV" secondAttribute="centerX" id="ggt-Xa-qdm"/>
+                            <constraint firstItem="ZYh-Tv-EsJ" firstAttribute="width" secondItem="MrG-Wj-VYV" secondAttribute="width" id="r8y-HH-97L"/>
+                        </constraints>
+                    </view>
+                    <connections>
+                        <outlet property="enumSearchBar" destination="ZYh-Tv-EsJ" id="alf-8a-YO9"/>
+                        <outlet property="enumTableView" destination="Ct6-5h-QWQ" id="a6f-ho-gNL"/>
+                        <outlet property="table_bottom_constraint" destination="KHm-su-pw0" id="zfr-s1-D8c"/>
+                    </connections>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="68A-uG-Eik" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="205.59999999999999" y="165.96701649175412"/>
+        </scene>
+    </scenes>
+    <resources>
+        <image name="check_0" width="24" height="24"/>
+        <image name="check_1" width="24" height="24"/>
+    </resources>
+</document>

+ 16 - 0
RedAnt ERP Mobile/common/CommonEditor/EnumSelectAndSort/EnumSelectAndSortCell.h

@@ -0,0 +1,16 @@
+//
+//  EnumSelectAndSortCell.h
+//  enumsort
+//
+//  Created by Jack on 2017/10/26.
+//  Copyright © 2017年 Jack. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface EnumSelectAndSortCell : UITableViewCell
+
+- (void)setEnumValue:(NSString *)value;
+- (void)setEnumSelection:(BOOL)selection;
+
+@end

+ 42 - 0
RedAnt ERP Mobile/common/CommonEditor/EnumSelectAndSort/EnumSelectAndSortCell.m

@@ -0,0 +1,42 @@
+//
+//  EnumSelectAndSortCell.m
+//  enumsort
+//
+//  Created by Jack on 2017/10/26.
+//  Copyright © 2017年 Jack. All rights reserved.
+//
+
+#import "EnumSelectAndSortCell.h"
+
+@interface EnumSelectAndSortCell ()
+
+@property (weak, nonatomic) IBOutlet UILabel *enumValueLabel;
+@property (weak, nonatomic) IBOutlet UIImageView *enumSelectionView;
+
+
+@end
+
+@implementation EnumSelectAndSortCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+- (void)setEnumValue:(NSString *)value {
+    self.enumValueLabel.text = value;
+}
+
+- (void)setEnumSelection:(BOOL)selection {
+    self.enumSelectionView.highlighted = selection;
+}
+
+
+
+@end

+ 17 - 0
RedAnt ERP Mobile/common/CommonEditor/EnumSelectAndSort/EnumSelectAndSortViewController.h

@@ -0,0 +1,17 @@
+//
+//  EnumSelectAndSortViewController.h
+//  enumsort
+//
+//  Created by Jack on 2017/10/26.
+//  Copyright © 2017年 Jack. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface EnumSelectAndSortViewController : UIViewController
+
+@property (nonatomic,strong) NSIndexPath *indexPath;
+@property (nonatomic,copy) void(^returnBlock)(NSDictionary *,NSIndexPath *);
+- (void)setEnumDataSource:(NSDictionary *)dataSource;
+
+@end

+ 299 - 0
RedAnt ERP Mobile/common/CommonEditor/EnumSelectAndSort/EnumSelectAndSortViewController.m

@@ -0,0 +1,299 @@
+//
+//  EnumSelectAndSortViewController.m
+//  enumsort
+//
+//  Created by Jack on 2017/10/26.
+//  Copyright © 2017年 Jack. All rights reserved.
+//
+
+#import "EnumSelectAndSortViewController.h"
+#import "EnumSelectAndSortCell.h"
+#import "EnumModel.h"
+
+@interface EnumSelectAndSortViewController () <UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate>
+
+@property (nonatomic,strong) NSDictionary *dicDataSource;
+@property (nonatomic,strong) NSMutableArray<EnumModel *> *arrayDataSource;
+@property (nonatomic,strong) NSMutableArray<EnumModel *> *modelArray;
+
+@property (nonatomic,copy) NSString *searchKeyword;
+@property (nonatomic,assign) BOOL searching;
+@property (nonatomic,strong) UITapGestureRecognizer *tapGesture;
+
+@property (weak, nonatomic) IBOutlet UITableView *enumTableView;
+@property (weak, nonatomic) IBOutlet UISearchBar *enumSearchBar;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *table_bottom_constraint;
+
+@end
+
+@implementation EnumSelectAndSortViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    
+    self.enumTableView.allowsSelectionDuringEditing = YES;
+    UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressTableViewToEdit:)];
+    [self.enumTableView addGestureRecognizer:gesture];
+    
+    [self setupNavigationBar];
+    [self registerKeyboardNotification];
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+- (void)dealloc {
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+#pragma mark - Keyboard Notification
+
+- (void)registerKeyboardNotification {
+    
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardChangeFrameNotificatoin:) name:UIKeyboardWillChangeFrameNotification object:nil];
+    
+}
+
+- (void)keyboardChangeFrameNotificatoin:(NSNotification *)notification {
+    NSTimeInterval duration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
+//    CGRect begin = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
+    CGRect end = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
+    
+    [UIView animateWithDuration:duration animations:^{
+       self.table_bottom_constraint.constant = self.view.bounds.size.height - end.origin.y;
+    }];
+    
+}
+
+#pragma mark - UI
+
+- (void)setupNavigationBar {
+    
+    if (self.navigationController && !self.navigationController.navigationBarHidden) {
+        UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"back"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
+                                                                     style:UIBarButtonItemStylePlain
+                                                                    target:self
+                                                                    action:@selector(leftBarItemClick:)];
+        self.navigationItem.leftBarButtonItem = leftItem;
+    }
+    
+    
+}
+
+#pragma mark - Data
+
+- (void)setEnumDataSource:(NSDictionary *)dataSource {
+    _dicDataSource = dataSource;
+    
+    if (!_arrayDataSource) {
+        _arrayDataSource = [NSMutableArray array];
+    } else {
+        [_arrayDataSource removeAllObjects];
+    }
+    
+    if (!_modelArray) {
+        _modelArray = [NSMutableArray array];
+    } else {
+        [_modelArray removeAllObjects];
+    }
+    
+    if (dataSource) {
+        for (int i=0; i<[[_dicDataSource valueForKey:@"count"] intValue]; i++)
+        {
+            NSDictionary* val_json = [_dicDataSource objectForKey:[NSString stringWithFormat:@"val_%d",i ]];
+            EnumModel *model = [[EnumModel alloc] init];
+            [model setJsonValue:val_json forSortId:i];
+            [_modelArray addObject:model];
+        }
+        [_arrayDataSource addObjectsFromArray:_modelArray];
+    }
+    
+    [self.enumTableView reloadData];
+}
+
+- (NSDictionary *)resultDataDic {
+    NSMutableDictionary *dic = [NSMutableDictionary dictionary];
+
+    for (int i = 0; i < _arrayDataSource.count; i++) {
+        EnumModel *model = [_arrayDataSource objectAtIndex:i];
+        NSDictionary *val_json = @{
+                                   @"check": @(model.check),
+                                   @"value": model.value,
+                                   @"value_id": @(model.value_id)
+                                   };
+        NSString *key = [NSString stringWithFormat:@"val_%d",i];
+        [dic setObject:val_json forKey:key];
+    }
+    
+    return dic;
+}
+
+- (void)searchKeyword:(NSString *)searchKeyword {
+    self.searchKeyword = searchKeyword;
+    
+    [_arrayDataSource removeAllObjects];
+    if (searchKeyword != nil && searchKeyword.length > 0) {
+        
+       
+        [_modelArray enumerateObjectsUsingBlock:^(EnumModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+            
+            EnumModel *model = (EnumModel *)obj;
+            if ([model.value.lowercaseString containsString:searchKeyword.lowercaseString]) {
+                [_arrayDataSource addObject:model];
+            }
+            
+        }];
+        
+    } else {
+
+        [_arrayDataSource addObjectsFromArray:_modelArray];
+        
+    }
+    
+    [_arrayDataSource sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
+     
+        EnumModel *model1 = (EnumModel *)obj1;
+        EnumModel *model2 = (EnumModel *)obj2;
+        
+        if (model1.sort_id > model2.sort_id) {
+            return NSOrderedDescending;
+        } else {
+            return NSOrderedAscending;
+        }
+        
+    }];
+    
+    [self.enumTableView reloadData];
+}
+
+#pragma mark - Gesture
+
+- (UITapGestureRecognizer *)tapGesture {
+    if (!_tapGesture) {
+        _tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapToEndSearch:)];
+    }
+    return _tapGesture;
+}
+
+- (void)longPressTableViewToEdit:(UILongPressGestureRecognizer *)gesture {
+    [self.enumTableView setEditing:YES animated:YES];
+}
+
+- (void)tapToEndSearch:(UITapGestureRecognizer *)gesture {
+    [self.enumSearchBar endEditing:YES];
+}
+
+#pragma mark - TableView DataSource & Delegate
+
+- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return _arrayDataSource.count;
+}
+
+- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    
+    EnumSelectAndSortCell *cell = [tableView dequeueReusableCellWithIdentifier:@"EnumSelectAndSortCell" forIndexPath:indexPath];
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    
+    EnumModel *model = [_arrayDataSource objectAtIndex:indexPath.row];
+    
+    [cell setEnumValue:model.value];
+    [cell setEnumSelection:model.check];
+    
+    return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (!self.searching) {
+        
+        if (tableView.isEditing) {
+            [tableView setEditing:NO animated:YES];
+        } else {
+            EnumSelectAndSortCell *cell = [tableView cellForRowAtIndexPath:indexPath];
+            
+            EnumModel *model = [_arrayDataSource objectAtIndex:indexPath.row];
+            model.check = !model.check;
+            
+            [cell setEnumSelection:model.check];
+        }
+    }
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 50.f;
+}
+
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+    return YES;
+}
+
+- (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return UITableViewCellEditingStyleNone;
+}
+
+-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
+    
+    EnumModel *source_model = [_arrayDataSource objectAtIndex:sourceIndexPath.row];
+    
+    // 修改数据源中的排序
+    if (sourceIndexPath.row > destinationIndexPath.row) {
+        [_arrayDataSource removeObject:source_model];
+        [_arrayDataSource insertObject:source_model atIndex:destinationIndexPath.row];
+    } else {
+        [_arrayDataSource removeObject:source_model];
+        [_arrayDataSource insertObject:source_model atIndex:destinationIndexPath.row - 1];
+    }
+    
+    // 修改Model Sort Id
+    [_arrayDataSource enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+        
+        EnumModel *model = (EnumModel *)obj;
+        model.sort_id = idx;
+        
+    }];
+}
+
+#pragma mark - Action
+
+- (void)leftBarItemClick:(UIBarButtonItem *)sender {
+    
+    if (self.returnBlock && self.indexPath) {
+        self.returnBlock([self resultDataDic], self.indexPath);
+    }
+    
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+#pragma mark - SearchBar Delegate
+
+- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
+    [self searchKeyword:searchText];
+}
+
+- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
+    [self searchKeyword:searchBar.text];
+}
+
+- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
+    self.searching = YES;
+    [self.enumTableView addGestureRecognizer:self.tapGesture];
+    return YES;
+}
+
+- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
+    self.searching = NO;
+    [searchBar resignFirstResponder];
+    [self.enumTableView removeGestureRecognizer:self.tapGesture];
+    return YES;
+}
+
+
+
+
+
+
+
+
+@end

+ 3 - 0
RedAnt ERP Mobile/common/Functions/modelDetail/DetailViewController.m

@@ -29,7 +29,10 @@
 #import "RAPDFViewController.h"
 
 #import "ModelDescriptionController.h"
+
+#ifdef BUILD_HOMER
 #import "HomerModelDetailHeaderCell.h"
+#endif
 
 #define  DEF_CELL_HEIGHT 44
 #define  DEF_TABLE_HEIGHT 44

+ 43 - 0
RedAnt ERP Mobile/iSales-GATIT.xcodeproj/project.pbxproj

@@ -47,6 +47,12 @@
 		42D9A0231EB02DA6008AF7AF /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42D9A0221EB02DA6008AF7AF /* AdSupport.framework */; };
 		42D9A0251EB03994008AF7AF /* libAdIdAccess.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42D9A0241EB03994008AF7AF /* libAdIdAccess.a */; };
 		42DC12F11F0CD98E00A4C011 /* OrderDetailPickInfoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42DC12F01F0CD98E00A4C011 /* OrderDetailPickInfoCell.m */; };
+		42EC60001FA1D8F200F8FAA4 /* FileCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 42EC5FFE1FA1D8F200F8FAA4 /* FileCache.m */; };
+		42EC60011FA1D8F200F8FAA4 /* RAConvertor.m in Sources */ = {isa = PBXBuildFile; fileRef = 42EC5FFF1FA1D8F200F8FAA4 /* RAConvertor.m */; };
+		42EC600A1FA1D90C00F8FAA4 /* EnumModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 42EC60041FA1D90B00F8FAA4 /* EnumModel.m */; };
+		42EC600B1FA1D90C00F8FAA4 /* EnumSelectAndSort.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 42EC60051FA1D90B00F8FAA4 /* EnumSelectAndSort.storyboard */; };
+		42EC600C1FA1D90C00F8FAA4 /* EnumSelectAndSortCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42EC60071FA1D90B00F8FAA4 /* EnumSelectAndSortCell.m */; };
+		42EC600D1FA1D90C00F8FAA4 /* EnumSelectAndSortViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42EC60091FA1D90B00F8FAA4 /* EnumSelectAndSortViewController.m */; };
 		42F9FACF1F8C592700D9C781 /* NetworkUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 42F9FACE1F8C592700D9C781 /* NetworkUtils.m */; };
 		42F9FAD21F8C595A00D9C781 /* RANetworkTaskDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 42F9FAD11F8C595A00D9C781 /* RANetworkTaskDelegate.m */; };
 		710274251CC606C4009FD219 /* UserListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 710274241CC606C4009FD219 /* UserListViewController.m */; };
@@ -351,6 +357,17 @@
 		42D9A0241EB03994008AF7AF /* libAdIdAccess.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libAdIdAccess.a; sourceTree = "<group>"; };
 		42DC12EF1F0CD98E00A4C011 /* OrderDetailPickInfoCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OrderDetailPickInfoCell.h; path = common/Functions/order/OrderDetailPickInfoCell.h; sourceTree = SOURCE_ROOT; };
 		42DC12F01F0CD98E00A4C011 /* OrderDetailPickInfoCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OrderDetailPickInfoCell.m; path = common/Functions/order/OrderDetailPickInfoCell.m; sourceTree = SOURCE_ROOT; };
+		42EC5FFC1FA1D8F100F8FAA4 /* FileCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileCache.h; path = ../../common/FileCache.h; sourceTree = "<group>"; };
+		42EC5FFD1FA1D8F100F8FAA4 /* RAConvertor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RAConvertor.h; path = ../../common/RAConvertor.h; sourceTree = "<group>"; };
+		42EC5FFE1FA1D8F200F8FAA4 /* FileCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FileCache.m; path = ../../common/FileCache.m; sourceTree = "<group>"; };
+		42EC5FFF1FA1D8F200F8FAA4 /* RAConvertor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RAConvertor.m; path = ../../common/RAConvertor.m; sourceTree = "<group>"; };
+		42EC60031FA1D90B00F8FAA4 /* EnumModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumModel.h; sourceTree = "<group>"; };
+		42EC60041FA1D90B00F8FAA4 /* EnumModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnumModel.m; sourceTree = "<group>"; };
+		42EC60051FA1D90B00F8FAA4 /* EnumSelectAndSort.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = EnumSelectAndSort.storyboard; sourceTree = "<group>"; };
+		42EC60061FA1D90B00F8FAA4 /* EnumSelectAndSortCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumSelectAndSortCell.h; sourceTree = "<group>"; };
+		42EC60071FA1D90B00F8FAA4 /* EnumSelectAndSortCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnumSelectAndSortCell.m; sourceTree = "<group>"; };
+		42EC60081FA1D90B00F8FAA4 /* EnumSelectAndSortViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumSelectAndSortViewController.h; sourceTree = "<group>"; };
+		42EC60091FA1D90B00F8FAA4 /* EnumSelectAndSortViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnumSelectAndSortViewController.m; sourceTree = "<group>"; };
 		42F9FACD1F8C592600D9C781 /* NetworkUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkUtils.h; path = ../../common/NetworkUtils.h; sourceTree = "<group>"; };
 		42F9FACE1F8C592700D9C781 /* NetworkUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NetworkUtils.m; path = ../../common/NetworkUtils.m; sourceTree = "<group>"; };
 		42F9FAD01F8C595A00D9C781 /* RANetworkTaskDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RANetworkTaskDelegate.h; path = ../../common/upload/RANetworkTaskDelegate.h; sourceTree = "<group>"; };
@@ -1066,6 +1083,21 @@
 			path = View;
 			sourceTree = "<group>";
 		};
+		42EC60021FA1D90B00F8FAA4 /* EnumSelectAndSort */ = {
+			isa = PBXGroup;
+			children = (
+				42EC60031FA1D90B00F8FAA4 /* EnumModel.h */,
+				42EC60041FA1D90B00F8FAA4 /* EnumModel.m */,
+				42EC60051FA1D90B00F8FAA4 /* EnumSelectAndSort.storyboard */,
+				42EC60061FA1D90B00F8FAA4 /* EnumSelectAndSortCell.h */,
+				42EC60071FA1D90B00F8FAA4 /* EnumSelectAndSortCell.m */,
+				42EC60081FA1D90B00F8FAA4 /* EnumSelectAndSortViewController.h */,
+				42EC60091FA1D90B00F8FAA4 /* EnumSelectAndSortViewController.m */,
+			);
+			name = EnumSelectAndSort;
+			path = common/CommonEditor/EnumSelectAndSort;
+			sourceTree = SOURCE_ROOT;
+		};
 		710212821B8D59DE00E1788B /* watchlist */ = {
 			isa = PBXGroup;
 			children = (
@@ -1371,6 +1403,10 @@
 		716387C71953CDB4006E65E6 /* utils */ = {
 			isa = PBXGroup;
 			children = (
+				42EC5FFC1FA1D8F100F8FAA4 /* FileCache.h */,
+				42EC5FFE1FA1D8F200F8FAA4 /* FileCache.m */,
+				42EC5FFD1FA1D8F100F8FAA4 /* RAConvertor.h */,
+				42EC5FFF1FA1D8F200F8FAA4 /* RAConvertor.m */,
 				71C1D84F1F456CB400CEA1C9 /* HWWeakTimer.h */,
 				71C1D8501F456CB400CEA1C9 /* HWWeakTimer.m */,
 				42BEF3211E89FE1100632AB6 /* GoogleAnalytics */,
@@ -1802,6 +1838,7 @@
 				71DF74591C575E7900F2789C /* SRMonthPicker.h */,
 				71DF745A1C575E7900F2789C /* SRMonthPicker.m */,
 				7115D45C1E16317600EF4E4C /* CommonEditor.storyboard */,
+				42EC60021FA1D90B00F8FAA4 /* EnumSelectAndSort */,
 			);
 			name = CommonEditor;
 			sourceTree = "<group>";
@@ -1888,6 +1925,7 @@
 				71C1D8311F456A9100CEA1C9 /* CUL.storyboard in Resources */,
 				713F76B41929F4A7006A7305 /* InfoPlist.strings in Resources */,
 				71C1D85C1F456E2500CEA1C9 /* debug_category_filter.json in Resources */,
+				42EC600B1FA1D90C00F8FAA4 /* EnumSelectAndSort.storyboard in Resources */,
 				71C014D31F46951A00DEB153 /* Main.storyboard in Resources */,
 				7165662F1EF3ACD900CB897F /* photostack_video.html in Resources */,
 				71C1D8421F456BE800CEA1C9 /* editContact.json in Resources */,
@@ -1954,11 +1992,14 @@
 				7162A5E31C5877CE00AB630E /* WatchListViewController.m in Sources */,
 				715001FF1D114D9100F5927F /* BundleDetailButton.m in Sources */,
 				7162A5421C58719D00AB630E /* RATreeNodeCollectionController.m in Sources */,
+				42EC600A1FA1D90C00F8FAA4 /* EnumModel.m in Sources */,
 				71DF74631C575E7900F2789C /* CommonEditorCellSwitch.m in Sources */,
 				7162A5DE1C5876E300AB630E /* RetrievePassViewController.m in Sources */,
 				428980461E249339005F1BD8 /* JKLockButton.m in Sources */,
 				71C1D8571F456D3400CEA1C9 /* ModelDescriptionController.m in Sources */,
 				7141DD541C57459B00F7DF59 /* rscode.c in Sources */,
+				42EC600C1FA1D90C00F8FAA4 /* EnumSelectAndSortCell.m in Sources */,
+				42EC600D1FA1D90C00F8FAA4 /* EnumSelectAndSortViewController.m in Sources */,
 				71DF74621C575E7900F2789C /* CommonEditorCellSignature.m in Sources */,
 				7162A5E01C5876E300AB630E /* SettingViewController.m in Sources */,
 				712AFEDB1DBA050200254965 /* LineDrawable.m in Sources */,
@@ -2042,6 +2083,7 @@
 				7162A59C1C58733400AB630E /* OrderDetailPriceCell.m in Sources */,
 				715850461CF6F0E500856B20 /* DefaultAppearance.m in Sources */,
 				71DF74301C57572600F2789C /* RAUtils.m in Sources */,
+				42EC60001FA1D8F200F8FAA4 /* FileCache.m in Sources */,
 				7162A5B61C58738600AB630E /* SCShapeView.m in Sources */,
 				7162A54A1C58719D00AB630E /* RATreeView+UIScrollView.m in Sources */,
 				7162A55D1C58724700AB630E /* ContactListViewController.m in Sources */,
@@ -2072,6 +2114,7 @@
 				42F9FACF1F8C592700D9C781 /* NetworkUtils.m in Sources */,
 				7162A5C41C5873BB00AB630E /* ItemSearchViewController.m in Sources */,
 				7162A5481C58719D00AB630E /* RATreeView+TableViewDataSource.m in Sources */,
+				42EC60011FA1D8F200F8FAA4 /* RAConvertor.m in Sources */,
 				42D3A4A31EFA6D36007A54C1 /* PhotoPreviewCell.m in Sources */,
 				7162A5DB1C5876E300AB630E /* CacheViewController.m in Sources */,
 				7162A5C21C5873BB00AB630E /* FilterCellValue.m in Sources */,

+ 31 - 0
RedAnt ERP Mobile/iSales-HOMER.xcodeproj/project.pbxproj

@@ -30,6 +30,10 @@
 		42B9A2381F46B49B00C808F3 /* DejaVuSans.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 71C1D8331F456ABE00CEA1C9 /* DejaVuSans.ttf */; };
 		42B9A2391F46B49B00C808F3 /* KALINGA.TTF in Resources */ = {isa = PBXBuildFile; fileRef = 71C1D8341F456ABE00CEA1C9 /* KALINGA.TTF */; };
 		42B9A23A1F46B49B00C808F3 /* KALINGAB.TTF in Resources */ = {isa = PBXBuildFile; fileRef = 71C1D8351F456ABE00CEA1C9 /* KALINGAB.TTF */; };
+		42BEAB291FA1D0780024D647 /* EnumModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BEAB231FA1D0770024D647 /* EnumModel.m */; };
+		42BEAB2A1FA1D0780024D647 /* EnumSelectAndSort.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 42BEAB241FA1D0770024D647 /* EnumSelectAndSort.storyboard */; };
+		42BEAB2B1FA1D0780024D647 /* EnumSelectAndSortCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BEAB261FA1D0770024D647 /* EnumSelectAndSortCell.m */; };
+		42BEAB2C1FA1D0780024D647 /* EnumSelectAndSortViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BEAB281FA1D0770024D647 /* EnumSelectAndSortViewController.m */; };
 		42BEF34F1E89FE1100632AB6 /* FirebaseAnalytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42BEF3241E89FE1100632AB6 /* FirebaseAnalytics.framework */; };
 		42BEF3501E89FE1100632AB6 /* FirebaseCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42BEF3271E89FE1100632AB6 /* FirebaseCore.framework */; };
 		42BEF3511E89FE1200632AB6 /* CHANGELOG.md in Sources */ = {isa = PBXBuildFile; fileRef = 42BEF3291E89FE1100632AB6 /* CHANGELOG.md */; };
@@ -316,6 +320,13 @@
 		42B309781E45BA32007AFC62 /* status_filter_cadedate_po.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = status_filter_cadedate_po.json; path = common/Functions/order/status_filter_cadedate_po.json; sourceTree = SOURCE_ROOT; };
 		42B9A2331F4692F000C808F3 /* placeOrderTemplate.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = placeOrderTemplate.json; path = "iSales-NPD/placeOrderTemplate.json"; sourceTree = SOURCE_ROOT; };
 		42B9A2351F46933A00C808F3 /* TearSheet.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = TearSheet.json; path = "iSales-NPD/TearSheet.json"; sourceTree = SOURCE_ROOT; };
+		42BEAB221FA1D0770024D647 /* EnumModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumModel.h; sourceTree = "<group>"; };
+		42BEAB231FA1D0770024D647 /* EnumModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnumModel.m; sourceTree = "<group>"; };
+		42BEAB241FA1D0770024D647 /* EnumSelectAndSort.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = EnumSelectAndSort.storyboard; sourceTree = "<group>"; };
+		42BEAB251FA1D0770024D647 /* EnumSelectAndSortCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumSelectAndSortCell.h; sourceTree = "<group>"; };
+		42BEAB261FA1D0770024D647 /* EnumSelectAndSortCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnumSelectAndSortCell.m; sourceTree = "<group>"; };
+		42BEAB271FA1D0770024D647 /* EnumSelectAndSortViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumSelectAndSortViewController.h; sourceTree = "<group>"; };
+		42BEAB281FA1D0770024D647 /* EnumSelectAndSortViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnumSelectAndSortViewController.m; sourceTree = "<group>"; };
 		42BEF3241E89FE1100632AB6 /* FirebaseAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseAnalytics.framework; sourceTree = "<group>"; };
 		42BEF3271E89FE1100632AB6 /* FirebaseCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseCore.framework; sourceTree = "<group>"; };
 		42BEF3291E89FE1100632AB6 /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = "<group>"; };
@@ -876,6 +887,21 @@
 			path = common/JKTimer;
 			sourceTree = SOURCE_ROOT;
 		};
+		42BEAB211FA1D0770024D647 /* EnumSelectAndSort */ = {
+			isa = PBXGroup;
+			children = (
+				42BEAB221FA1D0770024D647 /* EnumModel.h */,
+				42BEAB231FA1D0770024D647 /* EnumModel.m */,
+				42BEAB241FA1D0770024D647 /* EnumSelectAndSort.storyboard */,
+				42BEAB251FA1D0770024D647 /* EnumSelectAndSortCell.h */,
+				42BEAB261FA1D0770024D647 /* EnumSelectAndSortCell.m */,
+				42BEAB271FA1D0770024D647 /* EnumSelectAndSortViewController.h */,
+				42BEAB281FA1D0770024D647 /* EnumSelectAndSortViewController.m */,
+			);
+			name = EnumSelectAndSort;
+			path = common/CommonEditor/EnumSelectAndSort;
+			sourceTree = SOURCE_ROOT;
+		};
 		42BEF3211E89FE1100632AB6 /* GoogleAnalytics */ = {
 			isa = PBXGroup;
 			children = (
@@ -1838,6 +1864,7 @@
 				71DF74591C575E7900F2789C /* SRMonthPicker.h */,
 				71DF745A1C575E7900F2789C /* SRMonthPicker.m */,
 				7115D45C1E16317600EF4E4C /* CommonEditor.storyboard */,
+				42BEAB211FA1D0770024D647 /* EnumSelectAndSort */,
 			);
 			name = CommonEditor;
 			sourceTree = "<group>";
@@ -1917,6 +1944,7 @@
 				42B9A2381F46B49B00C808F3 /* DejaVuSans.ttf in Resources */,
 				42B9A2391F46B49B00C808F3 /* KALINGA.TTF in Resources */,
 				42B9A23A1F46B49B00C808F3 /* KALINGAB.TTF in Resources */,
+				42BEAB2A1FA1D0780024D647 /* EnumSelectAndSort.storyboard in Resources */,
 				71C1D85E1F456FCF00CEA1C9 /* config.plist in Resources */,
 				71C1D83E1F456BE800CEA1C9 /* order_info.html in Resources */,
 				71E3634A1F46963200CFAF19 /* Main.storyboard in Resources */,
@@ -2069,6 +2097,7 @@
 				71BF06FB1D2F3CAC00981938 /* OLDataProvider.m in Sources */,
 				7162A59B1C58733400AB630E /* OrderDetailModelCell.m in Sources */,
 				7162A5E91C5899F700AB630E /* MainViewController.m in Sources */,
+				42BEAB291FA1D0780024D647 /* EnumModel.m in Sources */,
 				71D01B1B1E0A2055006620CE /* PDFUtils.m in Sources */,
 				7141DD4F1C57459B00F7DF59 /* mask.c in Sources */,
 				7162A54E1C58722200AB630E /* CreditCardEditorViewController.m in Sources */,
@@ -2131,6 +2160,7 @@
 				428980041E2490C1005F1BD8 /* NotificationNameCenter.m in Sources */,
 				4289802C1E2492D2005F1BD8 /* CategoryPriceViewController.m in Sources */,
 				42BEF3511E89FE1200632AB6 /* CHANGELOG.md in Sources */,
+				42BEAB2C1FA1D0780024D647 /* EnumSelectAndSortViewController.m in Sources */,
 				42BEF35A1E89FE1200632AB6 /* README.md in Sources */,
 				71DF748D1C57608F00F2789C /* TouchLabel.m in Sources */,
 				71BF33031EFA1D6100842CB4 /* YTViewController.m in Sources */,
@@ -2140,6 +2170,7 @@
 				7162A51A1C58704600AB630E /* ModelItemCell.m in Sources */,
 				7141DD511C57459B00F7DF59 /* qrencode.c in Sources */,
 				7162A5451C58719D00AB630E /* RATreeView.m in Sources */,
+				42BEAB2B1FA1D0780024D647 /* EnumSelectAndSortCell.m in Sources */,
 				7162A4FE1C585FFB00AB630E /* RAPDFViewController.m in Sources */,
 				71DF74841C57608F00F2789C /* ImageScrollerViewController.m in Sources */,
 				71DF74861C57608F00F2789C /* ImageViewController.m in Sources */,

+ 31 - 0
RedAnt ERP Mobile/iSales-NPD.xcodeproj/project.pbxproj

@@ -31,6 +31,10 @@
 		42A51BF61D62F9AB00F13667 /* orderDetail.json in Resources */ = {isa = PBXBuildFile; fileRef = 42A51BF51D62F9AB00F13667 /* orderDetail.json */; };
 		42B309791E45BA32007AFC62 /* status_filter_cadedate_po.json in Resources */ = {isa = PBXBuildFile; fileRef = 42B309781E45BA32007AFC62 /* status_filter_cadedate_po.json */; };
 		42B3C9BB1D642C880053985C /* order_info.html in Resources */ = {isa = PBXBuildFile; fileRef = 42B3C9BA1D642C880053985C /* order_info.html */; };
+		42BEAB351FA1D23B0024D647 /* EnumModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BEAB2F1FA1D23A0024D647 /* EnumModel.m */; };
+		42BEAB361FA1D23B0024D647 /* EnumSelectAndSort.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 42BEAB301FA1D23A0024D647 /* EnumSelectAndSort.storyboard */; };
+		42BEAB371FA1D23B0024D647 /* EnumSelectAndSortCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BEAB321FA1D23A0024D647 /* EnumSelectAndSortCell.m */; };
+		42BEAB381FA1D23B0024D647 /* EnumSelectAndSortViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BEAB341FA1D23A0024D647 /* EnumSelectAndSortViewController.m */; };
 		42BEF34F1E89FE1100632AB6 /* FirebaseAnalytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42BEF3241E89FE1100632AB6 /* FirebaseAnalytics.framework */; };
 		42BEF3501E89FE1100632AB6 /* FirebaseCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42BEF3271E89FE1100632AB6 /* FirebaseCore.framework */; };
 		42BEF3511E89FE1200632AB6 /* CHANGELOG.md in Sources */ = {isa = PBXBuildFile; fileRef = 42BEF3291E89FE1100632AB6 /* CHANGELOG.md */; };
@@ -321,6 +325,13 @@
 		42A51BF51D62F9AB00F13667 /* orderDetail.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = orderDetail.json; sourceTree = "<group>"; };
 		42B309781E45BA32007AFC62 /* status_filter_cadedate_po.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = status_filter_cadedate_po.json; path = common/Functions/order/status_filter_cadedate_po.json; sourceTree = SOURCE_ROOT; };
 		42B3C9BA1D642C880053985C /* order_info.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = order_info.html; sourceTree = "<group>"; };
+		42BEAB2E1FA1D23A0024D647 /* EnumModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumModel.h; sourceTree = "<group>"; };
+		42BEAB2F1FA1D23A0024D647 /* EnumModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnumModel.m; sourceTree = "<group>"; };
+		42BEAB301FA1D23A0024D647 /* EnumSelectAndSort.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = EnumSelectAndSort.storyboard; sourceTree = "<group>"; };
+		42BEAB311FA1D23A0024D647 /* EnumSelectAndSortCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumSelectAndSortCell.h; sourceTree = "<group>"; };
+		42BEAB321FA1D23A0024D647 /* EnumSelectAndSortCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnumSelectAndSortCell.m; sourceTree = "<group>"; };
+		42BEAB331FA1D23A0024D647 /* EnumSelectAndSortViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumSelectAndSortViewController.h; sourceTree = "<group>"; };
+		42BEAB341FA1D23A0024D647 /* EnumSelectAndSortViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EnumSelectAndSortViewController.m; sourceTree = "<group>"; };
 		42BEF3241E89FE1100632AB6 /* FirebaseAnalytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseAnalytics.framework; sourceTree = "<group>"; };
 		42BEF3271E89FE1100632AB6 /* FirebaseCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseCore.framework; sourceTree = "<group>"; };
 		42BEF3291E89FE1100632AB6 /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = "<group>"; };
@@ -875,6 +886,21 @@
 			path = common/JKTimer;
 			sourceTree = SOURCE_ROOT;
 		};
+		42BEAB2D1FA1D23A0024D647 /* EnumSelectAndSort */ = {
+			isa = PBXGroup;
+			children = (
+				42BEAB2E1FA1D23A0024D647 /* EnumModel.h */,
+				42BEAB2F1FA1D23A0024D647 /* EnumModel.m */,
+				42BEAB301FA1D23A0024D647 /* EnumSelectAndSort.storyboard */,
+				42BEAB311FA1D23A0024D647 /* EnumSelectAndSortCell.h */,
+				42BEAB321FA1D23A0024D647 /* EnumSelectAndSortCell.m */,
+				42BEAB331FA1D23A0024D647 /* EnumSelectAndSortViewController.h */,
+				42BEAB341FA1D23A0024D647 /* EnumSelectAndSortViewController.m */,
+			);
+			name = EnumSelectAndSort;
+			path = common/CommonEditor/EnumSelectAndSort;
+			sourceTree = SOURCE_ROOT;
+		};
 		42BEF3211E89FE1100632AB6 /* GoogleAnalytics */ = {
 			isa = PBXGroup;
 			children = (
@@ -1829,6 +1855,7 @@
 				71DF74591C575E7900F2789C /* SRMonthPicker.h */,
 				71DF745A1C575E7900F2789C /* SRMonthPicker.m */,
 				7115D45C1E16317600EF4E4C /* CommonEditor.storyboard */,
+				42BEAB2D1FA1D23A0024D647 /* EnumSelectAndSort */,
 			);
 			name = CommonEditor;
 			sourceTree = "<group>";
@@ -1932,6 +1959,7 @@
 				7161FEB51D61B24900157EE1 /* creditcardpayment.html in Resources */,
 				71777FC61C8AC97300DA2511 /* debug_category_filter.json in Resources */,
 				71073AE61DD41DD8001BC653 /* so_thumb.json in Resources */,
+				42BEAB361FA1D23B0024D647 /* EnumSelectAndSort.storyboard in Resources */,
 				712AFEE71DBDB48000254965 /* portfolio_3x2.json in Resources */,
 				71E5A0101DC99370005BF655 /* config.plist in Resources */,
 				71DF74951C57614C00F2789C /* PhotoBorder.png in Resources */,
@@ -1996,11 +2024,14 @@
 				7162A5E31C5877CE00AB630E /* WatchListViewController.m in Sources */,
 				715001FF1D114D9100F5927F /* BundleDetailButton.m in Sources */,
 				7162A5421C58719D00AB630E /* RATreeNodeCollectionController.m in Sources */,
+				42BEAB351FA1D23B0024D647 /* EnumModel.m in Sources */,
 				71DF74631C575E7900F2789C /* CommonEditorCellSwitch.m in Sources */,
 				7162A5DE1C5876E300AB630E /* RetrievePassViewController.m in Sources */,
 				428980461E249339005F1BD8 /* JKLockButton.m in Sources */,
 				71C1D8541F456D2700CEA1C9 /* ModelDescriptionController.m in Sources */,
 				7141DD541C57459B00F7DF59 /* rscode.c in Sources */,
+				42BEAB371FA1D23B0024D647 /* EnumSelectAndSortCell.m in Sources */,
+				42BEAB381FA1D23B0024D647 /* EnumSelectAndSortViewController.m in Sources */,
 				71DF74621C575E7900F2789C /* CommonEditorCellSignature.m in Sources */,
 				7162A5E01C5876E300AB630E /* SettingViewController.m in Sources */,
 				712AFEDB1DBA050200254965 /* LineDrawable.m in Sources */,