Просмотр исходного кода

1.完成iOS Apex Drivers Setting。

Pen Li 7 лет назад
Родитель
Сommit
9041530928
55 измененных файлов с 1410 добавлено и 18 удалено
  1. 114 0
      Redant Drivers/Apex And Drivers.xcodeproj/project.pbxproj
  2. 23 1
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_available.imageset/Contents.json
  3. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_available.imageset/action_available.png
  4. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_available.imageset/action_available@2x.png
  5. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_available.imageset/action_available@3x.png
  6. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_message.imageset/action_message.png
  7. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_message.imageset/action_message@2x.png
  8. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_message.imageset/action_message@3x.png
  9. 23 0
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_message_new.imageset/Contents.json
  10. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_message_new.imageset/action_message_new.png
  11. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_message_new.imageset/action_message_new@2x.png
  12. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_message_new.imageset/action_message_new@3x.png
  13. 23 1
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_setting.imageset/Contents.json
  14. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_setting.imageset/action_setting.png
  15. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_setting.imageset/action_setting@2x.png
  16. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_setting.imageset/action_setting@3x.png
  17. 23 1
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_signout.imageset/Contents.json
  18. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_signout.imageset/action_signout.png
  19. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_signout.imageset/action_signout@2x.png
  20. BIN
      Redant Drivers/Apex And Drivers/Assets.xcassets/action_signout.imageset/action_signout@3x.png
  21. 3 3
      Redant Drivers/Apex And Drivers/Home/Home.storyboard
  22. 2 2
      Redant Drivers/Apex And Drivers/Home/HomeHeader.xib
  23. 13 2
      Redant Drivers/Apex And Drivers/Home/RAHomeOrderModel.m
  24. 2 0
      Redant Drivers/Apex And Drivers/RADataProvider.h
  25. 4 0
      Redant Drivers/Apex And Drivers/RADataProvider.m
  26. 13 0
      Redant Drivers/Apex And Drivers/Setting/Cell/RASettingActionCell.h
  27. 47 0
      Redant Drivers/Apex And Drivers/Setting/Cell/RASettingActionCell.m
  28. 16 0
      Redant Drivers/Apex And Drivers/Setting/Cell/RASettingBaseCell.h
  29. 46 0
      Redant Drivers/Apex And Drivers/Setting/Cell/RASettingBaseCell.m
  30. 13 0
      Redant Drivers/Apex And Drivers/Setting/Cell/RASettingOptionCell.h
  31. 43 0
      Redant Drivers/Apex And Drivers/Setting/Cell/RASettingOptionCell.m
  32. 13 0
      Redant Drivers/Apex And Drivers/Setting/Cell/RASettingSwitchCell.h
  33. 48 0
      Redant Drivers/Apex And Drivers/Setting/Cell/RASettingSwitchCell.m
  34. 44 0
      Redant Drivers/Apex And Drivers/Setting/Data/setting.json
  35. 22 0
      Redant Drivers/Apex And Drivers/Setting/Model/RASettingActionModel.h
  36. 21 0
      Redant Drivers/Apex And Drivers/Setting/Model/RASettingActionModel.m
  37. 32 0
      Redant Drivers/Apex And Drivers/Setting/Model/RASettingBaseModel.h
  38. 17 0
      Redant Drivers/Apex And Drivers/Setting/Model/RASettingBaseModel.m
  39. 27 0
      Redant Drivers/Apex And Drivers/Setting/Model/RASettingOptionModel.h
  40. 79 0
      Redant Drivers/Apex And Drivers/Setting/Model/RASettingOptionModel.m
  41. 16 0
      Redant Drivers/Apex And Drivers/Setting/Model/RASettingSectionModel.h
  42. 59 0
      Redant Drivers/Apex And Drivers/Setting/Model/RASettingSectionModel.m
  43. 16 0
      Redant Drivers/Apex And Drivers/Setting/Model/RASettingSwitchModel.h
  44. 21 0
      Redant Drivers/Apex And Drivers/Setting/Model/RASettingSwitchModel.m
  45. 15 0
      Redant Drivers/Apex And Drivers/Setting/Option/RAOptionCell.h
  46. 40 0
      Redant Drivers/Apex And Drivers/Setting/Option/RAOptionCell.m
  47. 18 0
      Redant Drivers/Apex And Drivers/Setting/Option/RAOptionViewController.h
  48. 110 0
      Redant Drivers/Apex And Drivers/Setting/Option/RAOptionViewController.m
  49. 13 0
      Redant Drivers/Apex And Drivers/Setting/RASettingViewController+TableDataSource.h
  50. 63 0
      Redant Drivers/Apex And Drivers/Setting/RASettingViewController+TableDataSource.m
  51. 13 0
      Redant Drivers/Apex And Drivers/Setting/RASettingViewController+TableDelegate.h
  52. 81 0
      Redant Drivers/Apex And Drivers/Setting/RASettingViewController+TableDelegate.m
  53. 4 0
      Redant Drivers/Apex And Drivers/Setting/RASettingViewController.h
  54. 48 7
      Redant Drivers/Apex And Drivers/Setting/RASettingViewController.m
  55. 182 1
      Redant Drivers/Apex And Drivers/Setting/setting.storyboard

+ 114 - 0
Redant Drivers/Apex And Drivers.xcodeproj/project.pbxproj

@@ -93,6 +93,20 @@
 		4255EC9C20C5286D00E5DA24 /* RAEditMultInputModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4255EC9B20C5286D00E5DA24 /* RAEditMultInputModel.m */; };
 		4255EC9F20C5287D00E5DA24 /* RAEditPhotoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4255EC9E20C5287D00E5DA24 /* RAEditPhotoModel.m */; };
 		4255ECA120C5400400E5DA24 /* Barcode_h.png in Resources */ = {isa = PBXBuildFile; fileRef = 4255ECA020C5400300E5DA24 /* Barcode_h.png */; };
+		425959742148F33D00F7DD41 /* RASettingOptionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 425959732148F33D00F7DD41 /* RASettingOptionModel.m */; };
+		425959772148F35A00F7DD41 /* RASettingBaseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 425959762148F35A00F7DD41 /* RASettingBaseModel.m */; };
+		4259597A2148F38000F7DD41 /* RASettingSwitchModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 425959792148F38000F7DD41 /* RASettingSwitchModel.m */; };
+		4259597D2148F39300F7DD41 /* RASettingActionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4259597C2148F39300F7DD41 /* RASettingActionModel.m */; };
+		425959802148F82600F7DD41 /* RASettingBaseCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4259597F2148F82600F7DD41 /* RASettingBaseCell.m */; };
+		425959832148F83C00F7DD41 /* RASettingOptionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 425959822148F83C00F7DD41 /* RASettingOptionCell.m */; };
+		425959862148F85100F7DD41 /* RASettingSwitchCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 425959852148F85100F7DD41 /* RASettingSwitchCell.m */; };
+		425959892148F85F00F7DD41 /* RASettingActionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 425959882148F85F00F7DD41 /* RASettingActionCell.m */; };
+		4259598C2148FD8200F7DD41 /* RASettingViewController+TableDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 4259598B2148FD8200F7DD41 /* RASettingViewController+TableDataSource.m */; };
+		4259598F2148FD9200F7DD41 /* RASettingViewController+TableDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4259598E2148FD9200F7DD41 /* RASettingViewController+TableDelegate.m */; };
+		425959922148FE2600F7DD41 /* RASettingSectionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 425959912148FE2600F7DD41 /* RASettingSectionModel.m */; };
+		42595995214905E400F7DD41 /* setting.json in Resources */ = {isa = PBXBuildFile; fileRef = 42595994214905E400F7DD41 /* setting.json */; };
+		4259599921490AE900F7DD41 /* RAOptionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4259599821490AE900F7DD41 /* RAOptionViewController.m */; };
+		4259599C21490B6200F7DD41 /* RAOptionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4259599B21490B6200F7DD41 /* RAOptionCell.m */; };
 		425B97CB20C7895F00B35713 /* RASingleton.m in Sources */ = {isa = PBXBuildFile; fileRef = 425B97CA20C7895F00B35713 /* RASingleton.m */; };
 		425B97D020C78ABE00B35713 /* RAUploadManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 425B97CE20C78ABE00B35713 /* RAUploadManager.m */; };
 		425B97D120C78ABE00B35713 /* RAUploadOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 425B97CF20C78ABE00B35713 /* RAUploadOperation.m */; };
@@ -343,6 +357,33 @@
 		4255EC9D20C5287D00E5DA24 /* RAEditPhotoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RAEditPhotoModel.h; sourceTree = "<group>"; };
 		4255EC9E20C5287D00E5DA24 /* RAEditPhotoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RAEditPhotoModel.m; sourceTree = "<group>"; };
 		4255ECA020C5400300E5DA24 /* Barcode_h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Barcode_h.png; sourceTree = "<group>"; };
+		425959722148F33D00F7DD41 /* RASettingOptionModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RASettingOptionModel.h; sourceTree = "<group>"; };
+		425959732148F33D00F7DD41 /* RASettingOptionModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RASettingOptionModel.m; sourceTree = "<group>"; };
+		425959752148F35A00F7DD41 /* RASettingBaseModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RASettingBaseModel.h; sourceTree = "<group>"; };
+		425959762148F35A00F7DD41 /* RASettingBaseModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RASettingBaseModel.m; sourceTree = "<group>"; };
+		425959782148F38000F7DD41 /* RASettingSwitchModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RASettingSwitchModel.h; sourceTree = "<group>"; };
+		425959792148F38000F7DD41 /* RASettingSwitchModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RASettingSwitchModel.m; sourceTree = "<group>"; };
+		4259597B2148F39300F7DD41 /* RASettingActionModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RASettingActionModel.h; sourceTree = "<group>"; };
+		4259597C2148F39300F7DD41 /* RASettingActionModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RASettingActionModel.m; sourceTree = "<group>"; };
+		4259597E2148F82600F7DD41 /* RASettingBaseCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RASettingBaseCell.h; sourceTree = "<group>"; };
+		4259597F2148F82600F7DD41 /* RASettingBaseCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RASettingBaseCell.m; sourceTree = "<group>"; };
+		425959812148F83C00F7DD41 /* RASettingOptionCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RASettingOptionCell.h; sourceTree = "<group>"; };
+		425959822148F83C00F7DD41 /* RASettingOptionCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RASettingOptionCell.m; sourceTree = "<group>"; };
+		425959842148F85100F7DD41 /* RASettingSwitchCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RASettingSwitchCell.h; sourceTree = "<group>"; };
+		425959852148F85100F7DD41 /* RASettingSwitchCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RASettingSwitchCell.m; sourceTree = "<group>"; };
+		425959872148F85E00F7DD41 /* RASettingActionCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RASettingActionCell.h; sourceTree = "<group>"; };
+		425959882148F85F00F7DD41 /* RASettingActionCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RASettingActionCell.m; sourceTree = "<group>"; };
+		4259598A2148FD8200F7DD41 /* RASettingViewController+TableDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RASettingViewController+TableDataSource.h"; sourceTree = "<group>"; };
+		4259598B2148FD8200F7DD41 /* RASettingViewController+TableDataSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "RASettingViewController+TableDataSource.m"; sourceTree = "<group>"; };
+		4259598D2148FD9200F7DD41 /* RASettingViewController+TableDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RASettingViewController+TableDelegate.h"; sourceTree = "<group>"; };
+		4259598E2148FD9200F7DD41 /* RASettingViewController+TableDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "RASettingViewController+TableDelegate.m"; sourceTree = "<group>"; };
+		425959902148FE2600F7DD41 /* RASettingSectionModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RASettingSectionModel.h; sourceTree = "<group>"; };
+		425959912148FE2600F7DD41 /* RASettingSectionModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RASettingSectionModel.m; sourceTree = "<group>"; };
+		42595994214905E400F7DD41 /* setting.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = setting.json; sourceTree = "<group>"; };
+		4259599721490AE900F7DD41 /* RAOptionViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RAOptionViewController.h; sourceTree = "<group>"; };
+		4259599821490AE900F7DD41 /* RAOptionViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RAOptionViewController.m; sourceTree = "<group>"; };
+		4259599A21490B6200F7DD41 /* RAOptionCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RAOptionCell.h; sourceTree = "<group>"; };
+		4259599B21490B6200F7DD41 /* RAOptionCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RAOptionCell.m; sourceTree = "<group>"; };
 		425B97C920C7895F00B35713 /* RASingleton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RASingleton.h; sourceTree = "<group>"; };
 		425B97CA20C7895F00B35713 /* RASingleton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RASingleton.m; sourceTree = "<group>"; };
 		425B97CC20C78ABD00B35713 /* RAUploadOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RAUploadOperation.h; path = ../../common/upload/RAUploadOperation.h; sourceTree = "<group>"; };
@@ -804,6 +845,57 @@
 			path = Model;
 			sourceTree = "<group>";
 		};
+		425959702148F2FF00F7DD41 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+				425959902148FE2600F7DD41 /* RASettingSectionModel.h */,
+				425959912148FE2600F7DD41 /* RASettingSectionModel.m */,
+				425959752148F35A00F7DD41 /* RASettingBaseModel.h */,
+				425959762148F35A00F7DD41 /* RASettingBaseModel.m */,
+				425959722148F33D00F7DD41 /* RASettingOptionModel.h */,
+				425959732148F33D00F7DD41 /* RASettingOptionModel.m */,
+				425959782148F38000F7DD41 /* RASettingSwitchModel.h */,
+				425959792148F38000F7DD41 /* RASettingSwitchModel.m */,
+				4259597B2148F39300F7DD41 /* RASettingActionModel.h */,
+				4259597C2148F39300F7DD41 /* RASettingActionModel.m */,
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
+		425959712148F30700F7DD41 /* Cell */ = {
+			isa = PBXGroup;
+			children = (
+				4259597E2148F82600F7DD41 /* RASettingBaseCell.h */,
+				4259597F2148F82600F7DD41 /* RASettingBaseCell.m */,
+				425959812148F83C00F7DD41 /* RASettingOptionCell.h */,
+				425959822148F83C00F7DD41 /* RASettingOptionCell.m */,
+				425959842148F85100F7DD41 /* RASettingSwitchCell.h */,
+				425959852148F85100F7DD41 /* RASettingSwitchCell.m */,
+				425959872148F85E00F7DD41 /* RASettingActionCell.h */,
+				425959882148F85F00F7DD41 /* RASettingActionCell.m */,
+			);
+			path = Cell;
+			sourceTree = "<group>";
+		};
+		425959932149040300F7DD41 /* Data */ = {
+			isa = PBXGroup;
+			children = (
+				42595994214905E400F7DD41 /* setting.json */,
+			);
+			path = Data;
+			sourceTree = "<group>";
+		};
+		4259599621490AD400F7DD41 /* Option */ = {
+			isa = PBXGroup;
+			children = (
+				4259599721490AE900F7DD41 /* RAOptionViewController.h */,
+				4259599821490AE900F7DD41 /* RAOptionViewController.m */,
+				4259599A21490B6200F7DD41 /* RAOptionCell.h */,
+				4259599B21490B6200F7DD41 /* RAOptionCell.m */,
+			);
+			path = Option;
+			sourceTree = "<group>";
+		};
 		425B97D220C7B7E100B35713 /* Upload */ = {
 			isa = PBXGroup;
 			children = (
@@ -903,8 +995,16 @@
 		42D7B072214794380046FE89 /* Setting */ = {
 			isa = PBXGroup;
 			children = (
+				4259599621490AD400F7DD41 /* Option */,
+				425959932149040300F7DD41 /* Data */,
+				425959712148F30700F7DD41 /* Cell */,
+				425959702148F2FF00F7DD41 /* Model */,
 				42D7B0742147945C0046FE89 /* RASettingViewController.h */,
 				42D7B0752147945C0046FE89 /* RASettingViewController.m */,
+				4259598A2148FD8200F7DD41 /* RASettingViewController+TableDataSource.h */,
+				4259598B2148FD8200F7DD41 /* RASettingViewController+TableDataSource.m */,
+				4259598D2148FD9200F7DD41 /* RASettingViewController+TableDelegate.h */,
+				4259598E2148FD9200F7DD41 /* RASettingViewController+TableDelegate.m */,
 				42D7B07A2147949B0046FE89 /* setting.storyboard */,
 			);
 			path = Setting;
@@ -1258,6 +1358,7 @@
 				4255EC7620C5097200E5DA24 /* Edit.storyboard in Resources */,
 				4205FD6320C136F900DB42B4 /* Home.storyboard in Resources */,
 				4205FD4420C0F2C000DB42B4 /* Login.storyboard in Resources */,
+				42595995214905E400F7DD41 /* setting.json in Resources */,
 				4235FAB8213E581E000B6672 /* Signature.xcassets in Resources */,
 				71EAA33920B9571B002F003C /* Main.storyboard in Resources */,
 			);
@@ -1295,6 +1396,7 @@
 				420D11022133E02800149B37 /* RAOrderFilterViewController.m in Sources */,
 				425B97D120C78ABE00B35713 /* RAUploadOperation.m in Sources */,
 				4255EC7120C4E2EC00E5DA24 /* RADetailActionSelectionModel.m in Sources */,
+				4259597A2148F38000F7DD41 /* RASettingSwitchModel.m in Sources */,
 				420D11092133EE5D00149B37 /* RAOrderFilterSectionModel.m in Sources */,
 				42D7B0762147945C0046FE89 /* RASettingViewController.m in Sources */,
 				42D8B8DE20C279BA001C125F /* RAOrderDetailViewController+TableViewDelegate.m in Sources */,
@@ -1307,6 +1409,7 @@
 				42529D2120C0E8EC000C0F4D /* NetworkUtils.m in Sources */,
 				420D11152133EF2800149B37 /* RAOrderFilterBaseModel.m in Sources */,
 				42D8B8CF20C2657D001C125F /* RADetailBaseModel.m in Sources */,
+				4259598F2148FD9200F7DD41 /* RASettingViewController+TableDelegate.m in Sources */,
 				42F0C5D720E20B3F00922442 /* RACameraViewController.m in Sources */,
 				4205FD5520C0F50C00DB42B4 /* JLPresentationController.m in Sources */,
 				424204EE20C66D20005AEED9 /* RAPhotoPreviewController.m in Sources */,
@@ -1333,6 +1436,7 @@
 				4235FAAD213E255D000B6672 /* SignatureViewController.m in Sources */,
 				420D110F2133EEE300149B37 /* RAOrderFilterInputModel.m in Sources */,
 				42529D3C20C0EA3F000C0F4D /* zip.c in Sources */,
+				4259599C21490B6200F7DD41 /* RAOptionCell.m in Sources */,
 				422DA1C02134FA7D0021BD70 /* RAPresentationController.m in Sources */,
 				42D8B8D220C267C7001C125F /* RADetailActionsLayout.m in Sources */,
 				420D111E2133F08F00149B37 /* RAOrderFilterDateCell.m in Sources */,
@@ -1341,11 +1445,13 @@
 				42D8B8B420C2463D001C125F /* RADetailLocationCell.m in Sources */,
 				4281100520E4D47000315156 /* UIView+JLExtension.m in Sources */,
 				423C6A4E20C909FC00455E27 /* RANotificationNameCenter.m in Sources */,
+				4259597D2148F39300F7DD41 /* RASettingActionModel.m in Sources */,
 				42D7B0792147946D0046FE89 /* RAMessageViewController.m in Sources */,
 				42529D3A20C0EA3F000C0F4D /* mztools.c in Sources */,
 				4235FAB3213E25AC000B6672 /* RAEditSignatureCell.m in Sources */,
 				4235FAA0213E1236000B6672 /* RADetailPhotoModel.m in Sources */,
 				4205FD5C20C1316200DB42B4 /* RABaseViewController.m in Sources */,
+				425959802148F82600F7DD41 /* RASettingBaseCell.m in Sources */,
 				425F1B6C2138F0470031B2C7 /* RANavigationController.m in Sources */,
 				425B97E220C7BC4A00B35713 /* RAUploadListViewController.m in Sources */,
 				4235FABB213E644A000B6672 /* RADetailSignatureCell.m in Sources */,
@@ -1353,7 +1459,9 @@
 				42810FF120E4C94200315156 /* RAHomeMoreViewController+TableDelegate.m in Sources */,
 				420D11212133F38500149B37 /* RAOrderFilterBaseCell.m in Sources */,
 				4280034120C0F146004D4F50 /* AESCrypt.m in Sources */,
+				425959922148FE2600F7DD41 /* RASettingSectionModel.m in Sources */,
 				4235FAB0213E258A000B6672 /* RAEditSignatureModel.m in Sources */,
+				425959742148F33D00F7DD41 /* RASettingOptionModel.m in Sources */,
 				42529D2520C0E97E000C0F4D /* RADataProvider.m in Sources */,
 				424204DC20C61561005AEED9 /* RAQRCodeScannerViewController.m in Sources */,
 				42D8B8D520C27399001C125F /* RADetailActionsCell+CollectionViewDelegate.m in Sources */,
@@ -1381,22 +1489,28 @@
 				4255EC6E20C4E29B00E5DA24 /* RADetailActionSelectionCell.m in Sources */,
 				4205FD4820C0F33500DB42B4 /* LoginViewController.m in Sources */,
 				42DFE266213F80AF000213C2 /* UIScrollView+Empty.m in Sources */,
+				425959772148F35A00F7DD41 /* RASettingBaseModel.m in Sources */,
 				4235FAB6213E30CC000B6672 /* RAEditImageBaseModel.m in Sources */,
 				4281100320E4D47000315156 /* JLRefreshBasis.m in Sources */,
 				420D11182133F06900149B37 /* RAOrderFilterStatusCell.m in Sources */,
 				4255EC7920C511E400E5DA24 /* RAOrderEditViewController+TableDataSource.m in Sources */,
 				42D8B8BB20C2486C001C125F /* RADetailActionSubCell.m in Sources */,
 				71EAA33320B9571B002F003C /* AppDelegate.m in Sources */,
+				4259598C2148FD8200F7DD41 /* RASettingViewController+TableDataSource.m in Sources */,
 				42D187802140BACC00C822C0 /* RAEditRequiredAlert.m in Sources */,
+				425959862148F85100F7DD41 /* RASettingSwitchCell.m in Sources */,
 				4205FD6F20C13E2700DB42B4 /* RAHomeViewController+HomeTableDataSource.m in Sources */,
+				425959892148F85F00F7DD41 /* RASettingActionCell.m in Sources */,
 				42D8B8C520C24AB4001C125F /* RADetailLocationModel.m in Sources */,
 				4281100220E4D47000315156 /* JLRefreshHeader.m in Sources */,
 				42529D4020C0EA59000C0F4D /* Reachability.m in Sources */,
 				4255EC9320C526FE00E5DA24 /* RAEditBaseModel.m in Sources */,
 				42529D3920C0EA3F000C0F4D /* ioapi.c in Sources */,
 				42D8B8B720C24656001C125F /* RADetailActionsCell.m in Sources */,
+				425959832148F83C00F7DD41 /* RASettingOptionCell.m in Sources */,
 				425B97CB20C7895F00B35713 /* RASingleton.m in Sources */,
 				420D11122133EEF500149B37 /* RAOrderFilterDateModel.m in Sources */,
+				4259599921490AE900F7DD41 /* RAOptionViewController.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

+ 23 - 1
Redant Drivers/Apex And Drivers/Assets.xcassets/action_available.imageset/Contents.json

@@ -1 +1,23 @@
-{"images": [{"idiom": "universal", "filename": "action_available.png", "scale": "1x"}, {"idiom": "universal", "filename": "action_available@2x.png", "scale": "2x"}, {"idiom": "universal", "filename": "action_available@3x.png", "scale": "3x"}], "info": {"version": 1, "author": "xcode"}}
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "action_available.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "action_available@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "action_available@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_available.imageset/action_available.png


BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_available.imageset/action_available@2x.png


BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_available.imageset/action_available@3x.png


BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_message.imageset/action_message.png


BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_message.imageset/action_message@2x.png


BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_message.imageset/action_message@3x.png


+ 23 - 0
Redant Drivers/Apex And Drivers/Assets.xcassets/action_message_new.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "action_message_new.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "action_message_new@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "action_message_new@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_message_new.imageset/action_message_new.png


BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_message_new.imageset/action_message_new@2x.png


BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_message_new.imageset/action_message_new@3x.png


+ 23 - 1
Redant Drivers/Apex And Drivers/Assets.xcassets/action_setting.imageset/Contents.json

@@ -1 +1,23 @@
-{"images": [{"idiom": "universal", "filename": "action_setting.png", "scale": "1x"}, {"idiom": "universal", "filename": "action_setting@2x.png", "scale": "2x"}, {"idiom": "universal", "filename": "action_setting@3x.png", "scale": "3x"}], "info": {"version": 1, "author": "xcode"}}
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "action_setting.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "action_setting@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "action_setting@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_setting.imageset/action_setting.png


BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_setting.imageset/action_setting@2x.png


BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_setting.imageset/action_setting@3x.png


+ 23 - 1
Redant Drivers/Apex And Drivers/Assets.xcassets/action_signout.imageset/Contents.json

@@ -1 +1,23 @@
-{"images": [{"idiom": "universal", "filename": "action_signout.png", "scale": "1x"}, {"idiom": "universal", "filename": "action_signout@2x.png", "scale": "2x"}, {"idiom": "universal", "filename": "action_signout@3x.png", "scale": "3x"}], "info": {"version": 1, "author": "xcode"}}
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "action_signout.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "action_signout@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "action_signout@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_signout.imageset/action_signout.png


BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_signout.imageset/action_signout@2x.png


BIN
Redant Drivers/Apex And Drivers/Assets.xcassets/action_signout.imageset/action_signout@3x.png


+ 3 - 3
Redant Drivers/Apex And Drivers/Home/Home.storyboard

@@ -136,7 +136,7 @@
                                                                 <constraint firstItem="LR1-3j-ccn" firstAttribute="leading" secondItem="0oy-zO-2fZ" secondAttribute="leading" id="wXZ-Kd-16P"/>
                                                             </constraints>
                                                         </view>
-                                                        <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="backend_flag.png" translatesAutoresizingMaskIntoConstraints="NO" id="Rxe-zz-m6W">
+                                                        <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="backend_flag" translatesAutoresizingMaskIntoConstraints="NO" id="Rxe-zz-m6W">
                                                             <rect key="frame" x="340" y="5" width="20" height="20"/>
                                                             <constraints>
                                                                 <constraint firstAttribute="height" constant="20" id="G2B-kt-1dz"/>
@@ -244,7 +244,7 @@
                                                             <nil key="textColor"/>
                                                             <nil key="highlightedColor"/>
                                                         </label>
-                                                        <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="backend_flag.png" translatesAutoresizingMaskIntoConstraints="NO" id="wDi-Zy-4rB">
+                                                        <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="backend_flag" translatesAutoresizingMaskIntoConstraints="NO" id="wDi-Zy-4rB">
                                                             <rect key="frame" x="340" y="5.5" width="20" height="20"/>
                                                             <constraints>
                                                                 <constraint firstAttribute="width" constant="20" id="RNz-ZX-3Xe"/>
@@ -404,6 +404,6 @@
         </scene>
     </scenes>
     <resources>
-        <image name="backend_flag.png" width="25" height="25"/>
+        <image name="backend_flag" width="20" height="20"/>
     </resources>
 </document>

+ 2 - 2
Redant Drivers/Apex And Drivers/Home/HomeHeader.xib

@@ -163,7 +163,7 @@
                                 <button opaque="NO" contentMode="scaleAspectFit" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="g4U-M8-oMo">
                                     <rect key="frame" x="58.5" y="19" width="40" height="40"/>
                                     <state key="normal" image="action_message"/>
-                                    <state key="selected" image="new_message.png"/>
+                                    <state key="selected" image="action_message_new"/>
                                     <connections>
                                         <action selector="messageBtnClick:" destination="CmN-WL-UzN" eventType="touchUpInside" id="rtb-6D-QVQ"/>
                                     </connections>
@@ -345,9 +345,9 @@
     <resources>
         <image name="action_available" width="40" height="40"/>
         <image name="action_message" width="40" height="40"/>
+        <image name="action_message_new" width="40" height="40"/>
         <image name="action_setting" width="40" height="40"/>
         <image name="action_signout" width="40" height="40"/>
         <image name="action_unavailable" width="40" height="40"/>
-        <image name="new_message.png" width="48" height="48"/>
     </resources>
 </document>

+ 13 - 2
Redant Drivers/Apex And Drivers/Home/RAHomeOrderModel.m

@@ -33,7 +33,7 @@
 
 - (void)setIcon:(UIImage *)icon {
     _icon = icon;
-    
+//    _icon = [UIImage imageNamed:@"on_the_way"];
     if (self.delegate && [self.delegate respondsToSelector:@selector(refreshUI)]) {
         dispatch_async(dispatch_get_main_queue(), ^{
             [self.delegate refreshUI];
@@ -54,7 +54,7 @@
         [RASingleton.sharedInstance.networkQueue addOperationWithBlock:^{
             
             UIImage *icon = [UIImage ra_imageWithURL:[NSURL URLWithString:iconURL]];
-            
+            icon = [self antiAlias:icon];
             if (weakSelf) {
                 __strong typeof(weakSelf) strongSelf = weakSelf;
                 [strongSelf setIcon:icon];
@@ -64,4 +64,15 @@
     }
 }
 
+- (UIImage *)antiAlias:(UIImage *)img {
+    
+    CGFloat size = 70.0f;
+    
+    UIGraphicsBeginImageContextWithOptions(CGSizeMake(size, size), NO, [UIScreen mainScreen].scale);
+    [img drawInRect:CGRectMake(0, 0, size, size)];
+    UIImage *antialias = UIGraphicsGetImageFromCurrentImageContext();
+    UIGraphicsEndImageContext();
+    return antialias;
+}
+
 @end

+ 2 - 0
Redant Drivers/Apex And Drivers/RADataProvider.h

@@ -40,4 +40,6 @@
 
 + (NSDictionary *)updateDriverAvailable:(BOOL)available;
 
++ (NSDictionary *)loadDataFromBundleFile:(NSString *)fileName;
+
 @end

+ 4 - 0
Redant Drivers/Apex And Drivers/RADataProvider.m

@@ -344,6 +344,10 @@
     return [self handleJsonData:json];
 }
 
++ (NSDictionary *)loadDataFromBundleFile:(NSString *)fileName {
+    return [self loadFakeData:fileName];
+}
+
 #pragma mark - Utils
 
 + (NSString *)dic2String:(NSDictionary *)dic {

+ 13 - 0
Redant Drivers/Apex And Drivers/Setting/Cell/RASettingActionCell.h

@@ -0,0 +1,13 @@
+//
+//  RASettingActionCell.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingBaseCell.h"
+
+@interface RASettingActionCell : RASettingBaseCell
+
+@end

+ 47 - 0
Redant Drivers/Apex And Drivers/Setting/Cell/RASettingActionCell.m

@@ -0,0 +1,47 @@
+//
+//  RASettingActionCell.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingActionCell.h"
+#import "RASettingActionModel.h"
+
+@interface RASettingActionCell ()
+
+@property (nonatomic,strong) IBOutlet UILabel *titleLabel;
+@property (nonatomic,strong) IBOutlet UIActivityIndicatorView *activityIndicator;
+
+@end
+
+@implementation RASettingActionCell
+
+- (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)refreshUI {
+    
+    RASettingActionModel *model = (RASettingActionModel *)self.model;
+    
+    NSString *title = model.title;
+    BOOL active = model.active;
+    
+    self.titleLabel.text = title;
+    if (active) {
+        [self.activityIndicator startAnimating];
+    } else{
+        [self.activityIndicator stopAnimating];
+    }
+}
+
+@end

+ 16 - 0
Redant Drivers/Apex And Drivers/Setting/Cell/RASettingBaseCell.h

@@ -0,0 +1,16 @@
+//
+//  RASettingBaseCell.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "RASettingBaseModel.h"
+
+@interface RASettingBaseCell : UITableViewCell <RASettingModelDelegate>
+
+@property (nonatomic,weak) RASettingBaseModel *model;
+
+@end

+ 46 - 0
Redant Drivers/Apex And Drivers/Setting/Cell/RASettingBaseCell.m

@@ -0,0 +1,46 @@
+//
+//  RASettingBaseCell.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingBaseCell.h"
+
+@implementation RASettingBaseCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)prepareForReuse {
+    [super prepareForReuse];
+    
+    self.model = nil;
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+- (void)setModel:(RASettingBaseModel *)model {
+    if (_model) {
+        _model.delegate = nil;
+    }
+    _model = model;
+    if (_model) {
+        _model.delegate = self;
+    }
+    
+    [self refreshUI];
+}
+
+- (void)refreshUI {
+    
+}
+
+@end

+ 13 - 0
Redant Drivers/Apex And Drivers/Setting/Cell/RASettingOptionCell.h

@@ -0,0 +1,13 @@
+//
+//  RASettingOptionCell.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingBaseCell.h"
+
+@interface RASettingOptionCell : RASettingBaseCell
+
+@end

+ 43 - 0
Redant Drivers/Apex And Drivers/Setting/Cell/RASettingOptionCell.m

@@ -0,0 +1,43 @@
+//
+//  RASettingOptionCell.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingOptionCell.h"
+#import "RASettingOptionModel.h"
+
+@interface RASettingOptionCell ()
+
+@property (nonatomic,strong) IBOutlet UILabel *titleLabel;
+@property (nonatomic,strong) IBOutlet UILabel *optionLabel;
+
+@end
+
+@implementation RASettingOptionCell
+
+- (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)refreshUI {
+    
+    RASettingOptionModel *model = (RASettingOptionModel *)self.model;
+    
+    NSString *title = model.title;
+    NSString *option = model.option.title;
+    
+    self.titleLabel.text = title;
+    self.optionLabel.text = option;
+}
+
+@end

+ 13 - 0
Redant Drivers/Apex And Drivers/Setting/Cell/RASettingSwitchCell.h

@@ -0,0 +1,13 @@
+//
+//  RASettingSwitchCell.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingBaseCell.h"
+
+@interface RASettingSwitchCell : RASettingBaseCell
+
+@end

+ 48 - 0
Redant Drivers/Apex And Drivers/Setting/Cell/RASettingSwitchCell.m

@@ -0,0 +1,48 @@
+//
+//  RASettingSwitchCell.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingSwitchCell.h"
+#import "RASettingSwitchModel.h"
+
+@interface RASettingSwitchCell ()
+
+@property (nonatomic,strong) IBOutlet UILabel *titleLabel;
+@property (nonatomic,strong) IBOutlet UISwitch *switchBtn;
+
+@end
+
+@implementation RASettingSwitchCell
+
+- (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)refreshUI {
+    
+    RASettingSwitchModel *model = (RASettingSwitchModel *)self.model;
+    NSString *title = model.title;
+    BOOL switchValue = model.switchValue;
+    
+    self.titleLabel.text = title;
+    self.switchBtn.on = switchValue;
+}
+
+- (IBAction)switchBtnClick:(UISwitch *)sender {
+    
+    RASettingSwitchModel *model = (RASettingSwitchModel *)self.model;
+    model.switchValue = sender.isOn;
+}
+
+@end

+ 44 - 0
Redant Drivers/Apex And Drivers/Setting/Data/setting.json

@@ -0,0 +1,44 @@
+{
+    "sections": [
+                 {
+                 "settings": [
+                              {
+                              "type": 0,
+                              "keyPath": "backgroundReportType",
+                              "title": "Background Location",
+                              "options": [
+                                          {
+                                          "option": 1,
+                                          "title": "Reject"
+                                          },
+                                          {
+                                          "option": 2,
+                                          "title": "Always ask"
+                                          },
+                                          {
+                                          "option": 3,
+                                          "title": "Allow"
+                                          }
+                                          ]
+                              }
+                              ]
+                 },
+                 {
+                 "settings": [
+                              {
+                              "type": 1,
+                              "keyPath": "notification",
+                              "title": "Notification"
+                              }
+                              ]
+                 },
+                 {
+                 "settings": [
+                              {
+                              "type": 2,
+                              "title": "Clean Cache"
+                              }
+                              ]
+                 }
+                 ]
+}

+ 22 - 0
Redant Drivers/Apex And Drivers/Setting/Model/RASettingActionModel.h

@@ -0,0 +1,22 @@
+//
+//  RASettingActionModel.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingBaseModel.h"
+
+typedef enum {
+    
+    RASettingActionTypeCleanCache = 0
+    
+} RASettingActionType;
+
+@interface RASettingActionModel : RASettingBaseModel
+
+@property (nonatomic,assign) RASettingActionType actionType;
+@property (nonatomic,assign) BOOL active;
+
+@end

+ 21 - 0
Redant Drivers/Apex And Drivers/Setting/Model/RASettingActionModel.m

@@ -0,0 +1,21 @@
+//
+//  RASettingActionModel.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingActionModel.h"
+
+@implementation RASettingActionModel
+
+- (void)setActive:(BOOL)active{
+    _active = active;
+    
+    if (self.delegate && [self.delegate respondsToSelector:@selector(refreshUI)]) {
+        [self.delegate refreshUI];
+    }
+}
+
+@end

+ 32 - 0
Redant Drivers/Apex And Drivers/Setting/Model/RASettingBaseModel.h

@@ -0,0 +1,32 @@
+//
+//  RASettingBaseModel.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+typedef enum {
+    
+    RASettingTypeOption = 0,
+    RASettingTypeSwitch = 1,
+    RASettingTypeAction = 2
+    
+} RASettingType;
+
+@protocol RASettingModelDelegate <NSObject>
+
+@optional
+- (void)refreshUI;
+
+@end
+
+@interface RASettingBaseModel : NSObject
+
+@property (nonatomic,assign) RASettingType type;
+@property (nonatomic,copy) NSString *title;
+@property (nonatomic,weak) id<RASettingModelDelegate> delegate;
+
+@end

+ 17 - 0
Redant Drivers/Apex And Drivers/Setting/Model/RASettingBaseModel.m

@@ -0,0 +1,17 @@
+//
+//  RASettingBaseModel.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingBaseModel.h"
+
+@implementation RASettingBaseModel
+
+- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
+    
+}
+
+@end

+ 27 - 0
Redant Drivers/Apex And Drivers/Setting/Model/RASettingOptionModel.h

@@ -0,0 +1,27 @@
+//
+//  RASettingSelectionModel.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingBaseModel.h"
+
+@interface RASettingOption : NSObject
+
+@property (nonatomic,assign) int option;
+@property (nonatomic,copy) NSString *title;
+
+@end
+
+@interface RASettingOptionModel : RASettingBaseModel
+
+@property (nonatomic,copy) NSString *keyPath;
+@property (nonatomic,strong) RASettingOption *option;
+@property (nonatomic,strong) NSArray<RASettingOption *> *options;
+
+- (int)selectedIndex;
+- (void)setSelectedIndex:(int)selectedIndex;
+
+@end

+ 79 - 0
Redant Drivers/Apex And Drivers/Setting/Model/RASettingOptionModel.m

@@ -0,0 +1,79 @@
+//
+//  RASettingSelectionModel.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingOptionModel.h"
+
+@implementation RASettingOption
+
+- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
+    
+}
+
+@end
+
+@implementation RASettingOptionModel
+
+- (void)setOption:(RASettingOption *)option {
+    _option = option;
+    
+    if (self.delegate && [self.delegate respondsToSelector:@selector(refreshUI)]) {
+        [self.delegate refreshUI];
+    }
+}
+
+- (void)setKeyPath:(NSString *)keyPath {
+    _keyPath = keyPath;
+    
+    if (self.options.count > 0 && _keyPath.length > 0) {
+        [self.options enumerateObjectsUsingBlock:^(RASettingOption * _Nonnull model, NSUInteger idx, BOOL * _Nonnull stop) {
+            
+            if (model.option == [[RASingleton.sharedInstance valueForKeyPath:self.keyPath] intValue]) {
+                self.option = model;
+            }
+        }];
+    }
+}
+
+- (void)setOptions:(NSArray<RASettingOption *> *)options {
+    
+    if (!options) {
+        _options = nil;
+        return;
+    }
+    
+    NSMutableArray<RASettingOption *> *arr = [NSMutableArray array];
+    for (NSDictionary *option in options) {
+        
+        RASettingOption *model = [RASettingOption new];
+        [model setValuesForKeysWithDictionary:option];
+        
+        if (self.keyPath.length > 0) {
+            if (model.option == [[RASingleton.sharedInstance valueForKeyPath:self.keyPath] intValue]) {
+                self.option = model;
+            }
+        }
+        
+        [arr addObject:model];
+    }
+    _options = arr;
+}
+
+- (int)selectedIndex {
+    
+    if (self.options.count == 0 || self.option == nil || ![self.options containsObject:self.option]) {
+        return -1;
+    }
+    return (int)[self.options indexOfObject:self.option];
+}
+
+- (void)setSelectedIndex:(int)selectedIndex {
+    
+    self.option = [self.options objectAtIndex:self.selectedIndex];
+}
+
+@end

+ 16 - 0
Redant Drivers/Apex And Drivers/Setting/Model/RASettingSectionModel.h

@@ -0,0 +1,16 @@
+//
+//  RASettingSectionModel.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class RASettingBaseModel;
+@interface RASettingSectionModel : NSObject
+
+@property (nonatomic,strong) NSArray<RASettingBaseModel *> *settings;
+
+@end

+ 59 - 0
Redant Drivers/Apex And Drivers/Setting/Model/RASettingSectionModel.m

@@ -0,0 +1,59 @@
+//
+//  RASettingSectionModel.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingSectionModel.h"
+#import "RASettingOptionModel.h"
+#import "RASettingSwitchModel.h"
+#import "RASettingActionModel.h"
+
+@implementation RASettingSectionModel
+
+- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
+    
+}
+
+- (void)setSettings:(NSArray<RASettingBaseModel *> *)settings {
+    if (!settings) {
+        _settings = nil;
+        return;
+    }
+    
+    NSMutableArray<RASettingBaseModel *> *arr = [NSMutableArray array];
+    for (NSDictionary *value in settings) {
+        
+        RASettingType type = [[value objectForKey:@"type"] intValue];
+        RASettingBaseModel *model = nil;
+        
+        switch (type) {
+            case RASettingTypeOption: {
+                model = [RASettingOptionModel new];
+            }
+                break;
+            case RASettingTypeSwitch: {
+                model = [RASettingSwitchModel new];
+            }
+                break;
+            case RASettingTypeAction: {
+                model = [RASettingActionModel new];
+            }
+                break;
+                
+            default:
+                break;
+        }
+        
+        if (model) {
+            [model setValuesForKeysWithDictionary:value];
+            [arr addObject:model];
+        }
+    }
+    
+    _settings = arr;
+}
+
+@end

+ 16 - 0
Redant Drivers/Apex And Drivers/Setting/Model/RASettingSwitchModel.h

@@ -0,0 +1,16 @@
+//
+//  RASettingSwitchModel.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingBaseModel.h"
+
+@interface RASettingSwitchModel : RASettingBaseModel
+
+@property (nonatomic,copy) NSString *keyPath;
+@property (nonatomic,assign) BOOL switchValue;
+
+@end

+ 21 - 0
Redant Drivers/Apex And Drivers/Setting/Model/RASettingSwitchModel.m

@@ -0,0 +1,21 @@
+//
+//  RASettingSwitchModel.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingSwitchModel.h"
+
+@implementation RASettingSwitchModel
+
+- (void)setSwitchValue:(BOOL)switchValue {
+    _switchValue = switchValue;
+    
+    if (self.delegate && [self.delegate respondsToSelector:@selector(refreshUI)]) {
+        [self.delegate refreshUI];
+    }
+}
+
+@end

+ 15 - 0
Redant Drivers/Apex And Drivers/Setting/Option/RAOptionCell.h

@@ -0,0 +1,15 @@
+//
+//  RAOptionCell.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface RAOptionCell : UITableViewCell
+
+- (void)setTitle:(NSString *)title;
+
+@end

+ 40 - 0
Redant Drivers/Apex And Drivers/Setting/Option/RAOptionCell.m

@@ -0,0 +1,40 @@
+//
+//  RAOptionCell.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RAOptionCell.h"
+
+@interface RAOptionCell ()
+
+@property (nonatomic,strong) IBOutlet UILabel *titleLabel;
+
+@end
+
+@implementation RAOptionCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)prepareForReuse {
+    [super prepareForReuse];
+    
+    [self setTitle:nil];
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+- (void)setTitle:(NSString *)title {
+    self.titleLabel.text = title;
+}
+
+@end

+ 18 - 0
Redant Drivers/Apex And Drivers/Setting/Option/RAOptionViewController.h

@@ -0,0 +1,18 @@
+//
+//  RAOptionViewController.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RABaseViewController.h"
+
+@class RASettingOption;
+@interface RAOptionViewController : RABaseViewController
+
++ (instancetype)optionViewControllerWith:(NSArray<RASettingOption *> *)options selectedIndex:(NSInteger)index;
+
+@property (nonatomic,copy) NSString *optionTitle;
+
+@end

+ 110 - 0
Redant Drivers/Apex And Drivers/Setting/Option/RAOptionViewController.m

@@ -0,0 +1,110 @@
+//
+//  RAOptionViewController.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RAOptionViewController.h"
+#import "RASettingOptionModel.h"
+#import "RAOptionCell.h"
+
+@interface RAOptionViewController () <UITableViewDelegate,UITableViewDataSource>
+
+@property (nonatomic,strong) IBOutlet UITableView *optionTable;
+@property (nonatomic,strong) NSArray<RASettingOption *> *options;
+@property (nonatomic,assign) NSInteger selectedIndex;
+
+@end
+
+@implementation RAOptionViewController
+
++ (instancetype)optionViewControllerWith:(NSArray<RASettingOption *> *)options selectedIndex:(NSInteger)index {
+    RAOptionViewController *optionVC = [self viewControllerFromStoryboard];
+    optionVC.options = options;
+    optionVC.selectedIndex = index;
+    
+    return optionVC;
+}
+
++ (instancetype)viewControllerFromStoryboard {
+    RAOptionViewController *optionVC = [[UIStoryboard storyboardWithName:@"setting" bundle:nil] instantiateViewControllerWithIdentifier:[self storyboardID]];
+    return optionVC;
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    
+    [self configTable];
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+#pragma mark - config
+
+- (void)configTable {
+    
+    self.optionTable.tableFooterView = [UIView new];
+    self.optionTable.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1];
+}
+
+#pragma mark - Table
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return 1;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.options.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    RAOptionCell *cell = [tableView dequeueReusableCellWithIdentifier:@"RAOptionCell" forIndexPath:indexPath];
+    RASettingOption *option = [self.options objectAtIndex:indexPath.row];
+    
+    [cell setTitle:option.title];
+    if (self.selectedIndex == indexPath.row) {
+        cell.accessoryType = UITableViewCellAccessoryCheckmark;
+    } else {
+        cell.accessoryType = UITableViewCellAccessoryNone;
+    }
+    
+    return cell;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 50.0f;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    return 25.0f;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    
+    UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(tableView.bounds), 25.0f)];
+//    header.backgroundColor = ApexDriverGrayColor;
+    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5, 2, CGRectGetWidth(tableView.bounds) - 20, 21)];
+    label.font = [UIFont systemFontOfSize:14.0f];
+    label.textColor = [UIColor grayColor];
+//    label.textColor = ApexDriverWhiteColor;
+    [header addSubview:label];
+    
+    label.text = self.optionTitle;
+    
+    return header;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    self.selectedIndex = indexPath.row;
+    
+    [tableView reloadData];
+}
+
+@end

+ 13 - 0
Redant Drivers/Apex And Drivers/Setting/RASettingViewController+TableDataSource.h

@@ -0,0 +1,13 @@
+//
+//  RASettingViewController+TableDataSource.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingViewController.h"
+
+@interface RASettingViewController (TableDataSource) <UITableViewDataSource>
+
+@end

+ 63 - 0
Redant Drivers/Apex And Drivers/Setting/RASettingViewController+TableDataSource.m

@@ -0,0 +1,63 @@
+//
+//  RASettingViewController+TableDataSource.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingViewController+TableDataSource.h"
+#import "RASettingSectionModel.h"
+#import "RASettingOptionModel.h"
+#import "RASettingSwitchModel.h"
+#import "RASettingActionModel.h"
+
+#import "RASettingOptionCell.h"
+#import "RASettingSwitchCell.h"
+#import "RASettingActionCell.h"
+
+@implementation RASettingViewController (TableDataSource)
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return self.sections.count;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    RASettingSectionModel *sectionModel = [self.sections objectAtIndex:section];
+    return sectionModel.settings.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    RASettingSectionModel *sectionModel = [self.sections objectAtIndex:indexPath.section];
+    RASettingBaseModel *model = [sectionModel.settings objectAtIndex:indexPath.row];
+    
+    RASettingBaseCell *cell = nil;
+    
+    switch (model.type) {
+        case RASettingTypeOption: {
+            
+             cell = [tableView dequeueReusableCellWithIdentifier:@"RASettingOptionCell" forIndexPath:indexPath];
+        }
+            break;
+        case RASettingTypeSwitch: {
+           
+            cell = [tableView dequeueReusableCellWithIdentifier:@"RASettingSwitchCell" forIndexPath:indexPath];
+        }
+            break;
+        case RASettingTypeAction: {
+            
+            cell = [tableView dequeueReusableCellWithIdentifier:@"RASettingActionCell" forIndexPath:indexPath];
+        }
+            break;
+        default: {
+            cell = [RASettingBaseCell new];
+        }
+            break;
+    }
+    
+    [cell setModel:model];
+    return cell;
+}
+
+@end

+ 13 - 0
Redant Drivers/Apex And Drivers/Setting/RASettingViewController+TableDelegate.h

@@ -0,0 +1,13 @@
+//
+//  RASettingViewController+TableDelegate.h
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingViewController.h"
+
+@interface RASettingViewController (TableDelegate) <UITableViewDelegate>
+
+@end

+ 81 - 0
Redant Drivers/Apex And Drivers/Setting/RASettingViewController+TableDelegate.m

@@ -0,0 +1,81 @@
+//
+//  RASettingViewController+TableDelegate.m
+//  Apex And Drivers
+//
+//  Created by Jack on 2018/9/12.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "RASettingViewController+TableDelegate.h"
+#import "RASettingSectionModel.h"
+#import "RASettingOptionModel.h"
+#import "RASettingSwitchModel.h"
+#import "RASettingActionModel.h"
+
+#import "RAOptionViewController.h"
+
+@implementation RASettingViewController (TableDelegate)
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 60.0f;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    return 30.0f;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    return [UIView new];
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    RASettingSectionModel *sectionModel = [self.sections objectAtIndex:indexPath.section];
+    RASettingBaseModel *model = [sectionModel.settings objectAtIndex:indexPath.row];
+    
+    switch (model.type) {
+        case RASettingTypeOption: {
+            
+            RASettingOptionModel *optionModel = (RASettingOptionModel *)model;
+            [self showOption:optionModel];
+        }
+            break;
+        case RASettingTypeSwitch: {
+            
+        }
+            break;
+        case RASettingTypeAction: {
+            RASettingActionModel *actionModel = (RASettingActionModel *)model;
+            switch (actionModel.actionType) {
+                case RASettingActionTypeCleanCache: {
+                    
+                }
+                    break;
+                    
+                default:
+                    break;
+            }
+        }
+            break;
+        default: {
+        }
+            break;
+    }
+    
+}
+
+#pragma mark - Show Option
+
+- (void)showOption:(RASettingOptionModel *)model {
+    
+    if (!model) {
+        return;
+    }
+    
+    RAOptionViewController *optionVC = [RAOptionViewController optionViewControllerWith:model.options selectedIndex:model.selectedIndex];
+    optionVC.optionTitle = model.title;
+    
+    [self.navigationController pushViewController:optionVC animated:YES];
+}
+
+@end

+ 4 - 0
Redant Drivers/Apex And Drivers/Setting/RASettingViewController.h

@@ -8,6 +8,10 @@
 
 #import "RABaseViewController.h"
 
+@class RASettingSectionModel;
 @interface RASettingViewController : RABaseViewController
 
+@property (nonatomic,strong,readonly) UITableView *tableView;
+@property (nonatomic,strong,readonly) NSArray<RASettingSectionModel *> *sections;
+
 @end

+ 48 - 7
Redant Drivers/Apex And Drivers/Setting/RASettingViewController.m

@@ -7,8 +7,13 @@
 //
 
 #import "RASettingViewController.h"
+#import "RASettingSectionModel.h"
 
 @interface RASettingViewController ()
+{
+    NSMutableArray<RASettingSectionModel *> *_sections;
+}
+@property (nonatomic,strong) IBOutlet UITableView *settingTableView;
 
 @end
 
@@ -22,6 +27,9 @@
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
+    
+    [self configTableView];
+    [self loadData];
 }
 
 - (void)didReceiveMemoryWarning {
@@ -29,14 +37,47 @@
     // Dispose of any resources that can be recreated.
 }
 
-/*
-#pragma mark - Navigation
+#pragma mark - Config
+
+- (void)configTableView {
+    
+    self.tableView.tableFooterView = [UIView new];
+    self.tableView.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1];
+}
+
+#pragma mark - Getter
+
+- (UITableView *)tableView {
+    return self.settingTableView;
+}
+
+- (NSArray<RASettingSectionModel *> *)sections {
+    if (!_sections) {
+        _sections = [NSMutableArray array];
+    }
+    return _sections;
+}
+
+#pragma mark - Data
 
-// In a storyboard-based application, you will often want to do a little preparation before navigation
-- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
-    // Get the new view controller using [segue destinationViewController].
-    // Pass the selected object to the new view controller.
+- (void)loadData {
+    
+    NSDictionary *json = [RADataProvider loadDataFromBundleFile:@"setting.json"];
+    NSMutableArray *tmpArr = [NSMutableArray array];
+    NSArray *sectionArr = [json objectForKey:@"sections"];
+    
+    for (NSDictionary *section in sectionArr) {
+        
+        RASettingSectionModel *model = [RASettingSectionModel new];
+        [model setValuesForKeysWithDictionary:section];
+        [tmpArr addObject:model];
+    }
+    
+    NSMutableArray *sections = (NSMutableArray *)self.sections;
+    [sections removeAllObjects];
+    [sections addObjectsFromArray:tmpArr];
+    
+    [self.tableView reloadData];
 }
-*/
 
 @end

+ 182 - 1
Redant Drivers/Apex And Drivers/Setting/setting.storyboard

@@ -17,13 +17,194 @@
                     <view key="view" contentMode="scaleToFill" id="8S7-LR-mQz">
                         <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="bt6-9g-1Sc">
+                                <rect key="frame" x="0.0" y="20" width="375" height="647"/>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <prototypes>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="RASettingOptionCell" rowHeight="60" id="S3b-rg-Apb" customClass="RASettingOptionCell">
+                                        <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" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="S3b-rg-Apb" id="GJS-xN-7T2">
+                                            <rect key="frame" x="0.0" y="0.0" width="342" 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="nn8-Yz-pgL">
+                                                    <rect key="frame" x="10" y="21" width="37.5" height="18"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9Ne-f7-mNd">
+                                                    <rect key="frame" x="306.5" y="21.5" width="35.5" height="17"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="9Ne-f7-mNd" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="nn8-Yz-pgL" secondAttribute="trailing" constant="5" id="1T7-VV-jvL"/>
+                                                <constraint firstItem="nn8-Yz-pgL" firstAttribute="leading" secondItem="GJS-xN-7T2" secondAttribute="leading" constant="10" id="cvQ-db-eYR"/>
+                                                <constraint firstAttribute="trailing" secondItem="9Ne-f7-mNd" secondAttribute="trailing" id="dZq-Ec-CZl"/>
+                                                <constraint firstItem="nn8-Yz-pgL" firstAttribute="centerY" secondItem="GJS-xN-7T2" secondAttribute="centerY" id="fPw-52-LTs"/>
+                                                <constraint firstItem="9Ne-f7-mNd" firstAttribute="centerY" secondItem="GJS-xN-7T2" secondAttribute="centerY" id="njH-Bq-s6w"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                        <connections>
+                                            <outlet property="optionLabel" destination="9Ne-f7-mNd" id="kTq-Cj-pgv"/>
+                                            <outlet property="titleLabel" destination="nn8-Yz-pgL" id="WWa-r1-XL0"/>
+                                        </connections>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="RASettingSwitchCell" rowHeight="60" id="fw3-Ce-iMX" customClass="RASettingSwitchCell">
+                                        <rect key="frame" x="0.0" y="88" width="375" height="60"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="fw3-Ce-iMX" id="i0k-qx-Z3s">
+                                            <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="7mb-Gz-UK4">
+                                                    <rect key="frame" x="10" y="21" width="296" height="18"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="745-1J-0vr">
+                                                    <rect key="frame" x="316" y="14" width="51" height="31"/>
+                                                    <connections>
+                                                        <action selector="switchBtnClick:" destination="fw3-Ce-iMX" eventType="valueChanged" id="qlF-Jb-a7c"/>
+                                                    </connections>
+                                                </switch>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="745-1J-0vr" firstAttribute="centerY" secondItem="i0k-qx-Z3s" secondAttribute="centerY" id="1Z7-Li-Ptg"/>
+                                                <constraint firstAttribute="trailing" secondItem="745-1J-0vr" secondAttribute="trailing" constant="10" id="7A0-bw-pag"/>
+                                                <constraint firstItem="745-1J-0vr" firstAttribute="leading" secondItem="7mb-Gz-UK4" secondAttribute="trailing" constant="10" id="Hyu-cl-UKN"/>
+                                                <constraint firstItem="7mb-Gz-UK4" firstAttribute="centerY" secondItem="i0k-qx-Z3s" secondAttribute="centerY" id="f2x-8F-0gN"/>
+                                                <constraint firstItem="7mb-Gz-UK4" firstAttribute="leading" secondItem="i0k-qx-Z3s" secondAttribute="leading" constant="10" id="sJh-ny-IxH"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                        <connections>
+                                            <outlet property="switchBtn" destination="745-1J-0vr" id="Scx-YQ-3bH"/>
+                                            <outlet property="titleLabel" destination="7mb-Gz-UK4" id="LcA-KO-Th1"/>
+                                        </connections>
+                                    </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="RASettingActionCell" rowHeight="60" id="d2O-Oc-12t" customClass="RASettingActionCell">
+                                        <rect key="frame" x="0.0" y="148" width="375" height="60"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="d2O-Oc-12t" id="NTz-8W-1bG">
+                                            <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="rXI-of-ag8">
+                                                    <rect key="frame" x="10" y="21" width="325" height="18"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" hidesWhenStopped="YES" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="Wf2-XY-ejy">
+                                                    <rect key="frame" x="345" y="20" width="20" height="20"/>
+                                                    <color key="color" red="0.99917410539999996" green="0.82124866299999999" blue="0.23193136440000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                                </activityIndicatorView>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="trailing" secondItem="Wf2-XY-ejy" secondAttribute="trailing" constant="10" id="Hv4-VV-t0p"/>
+                                                <constraint firstItem="rXI-of-ag8" firstAttribute="leading" secondItem="NTz-8W-1bG" secondAttribute="leading" constant="10" id="K74-vK-dVC"/>
+                                                <constraint firstItem="rXI-of-ag8" firstAttribute="centerY" secondItem="NTz-8W-1bG" secondAttribute="centerY" id="NoT-Ks-zr9"/>
+                                                <constraint firstItem="Wf2-XY-ejy" firstAttribute="leading" secondItem="rXI-of-ag8" secondAttribute="trailing" constant="10" id="Xq4-z3-0Dg"/>
+                                                <constraint firstItem="Wf2-XY-ejy" firstAttribute="centerY" secondItem="NTz-8W-1bG" secondAttribute="centerY" id="iZb-76-W4M"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                        <connections>
+                                            <outlet property="activityIndicator" destination="Wf2-XY-ejy" id="u3g-pn-8Fg"/>
+                                            <outlet property="titleLabel" destination="rXI-of-ag8" id="vGF-n3-dC6"/>
+                                        </connections>
+                                    </tableViewCell>
+                                </prototypes>
+                                <connections>
+                                    <outlet property="dataSource" destination="K1Z-ea-fUh" id="17k-2P-W4r"/>
+                                    <outlet property="delegate" destination="K1Z-ea-fUh" id="rgY-MS-P2k"/>
+                                </connections>
+                            </tableView>
+                        </subviews>
                         <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <constraints>
+                            <constraint firstItem="bt6-9g-1Sc" firstAttribute="top" secondItem="oTy-yr-RHK" secondAttribute="top" id="3do-tf-2x8"/>
+                            <constraint firstItem="oTy-yr-RHK" firstAttribute="trailing" secondItem="bt6-9g-1Sc" secondAttribute="trailing" id="PqX-0F-0gI"/>
+                            <constraint firstItem="bt6-9g-1Sc" firstAttribute="leading" secondItem="oTy-yr-RHK" secondAttribute="leading" id="fDd-SR-kyZ"/>
+                            <constraint firstItem="oTy-yr-RHK" firstAttribute="bottom" secondItem="bt6-9g-1Sc" secondAttribute="bottom" id="ny6-IT-Teu"/>
+                        </constraints>
                         <viewLayoutGuide key="safeArea" id="oTy-yr-RHK"/>
                     </view>
+                    <connections>
+                        <outlet property="settingTableView" destination="bt6-9g-1Sc" id="nMT-hv-aC5"/>
+                    </connections>
                 </viewController>
                 <placeholder placeholderIdentifier="IBFirstResponder" id="hs2-jY-gRV" userLabel="First Responder" sceneMemberID="firstResponder"/>
             </objects>
-            <point key="canvasLocation" x="-238" y="54"/>
+            <point key="canvasLocation" x="-239.19999999999999" y="53.523238380809602"/>
+        </scene>
+        <!--Option View Controller-->
+        <scene sceneID="cmB-vN-FrB">
+            <objects>
+                <viewController storyboardIdentifier="RAOptionViewController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="vLn-jg-qO2" customClass="RAOptionViewController" sceneMemberID="viewController">
+                    <view key="view" contentMode="scaleToFill" id="JuG-f5-RAN">
+                        <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="Tfn-3m-nS4">
+                                <rect key="frame" x="0.0" y="20" width="375" height="647"/>
+                                <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <prototypes>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="RAOptionCell" rowHeight="50" id="vtS-6b-ZlL" customClass="RAOptionCell">
+                                        <rect key="frame" x="0.0" y="28" width="375" height="50"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="vtS-6b-ZlL" id="0Gc-fu-jG7">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="49.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="H3V-Ud-CQM">
+                                                    <rect key="frame" x="5" y="16" width="365" height="18"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="H3V-Ud-CQM" firstAttribute="leading" secondItem="0Gc-fu-jG7" secondAttribute="leading" constant="5" id="2uH-tT-jKF"/>
+                                                <constraint firstAttribute="trailing" secondItem="H3V-Ud-CQM" secondAttribute="trailing" constant="5" id="ioK-Ty-4Gp"/>
+                                                <constraint firstItem="H3V-Ud-CQM" firstAttribute="centerY" secondItem="0Gc-fu-jG7" secondAttribute="centerY" id="tZx-8w-jk0"/>
+                                            </constraints>
+                                        </tableViewCellContentView>
+                                        <connections>
+                                            <outlet property="titleLabel" destination="H3V-Ud-CQM" id="rFH-ND-7e9"/>
+                                        </connections>
+                                    </tableViewCell>
+                                </prototypes>
+                                <connections>
+                                    <outlet property="dataSource" destination="vLn-jg-qO2" id="fpk-er-qlH"/>
+                                    <outlet property="delegate" destination="vLn-jg-qO2" id="itb-oC-qVX"/>
+                                </connections>
+                            </tableView>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <constraints>
+                            <constraint firstItem="Tfn-3m-nS4" firstAttribute="leading" secondItem="Glx-5I-7JL" secondAttribute="leading" id="6FQ-cE-kUg"/>
+                            <constraint firstItem="Tfn-3m-nS4" firstAttribute="top" secondItem="Glx-5I-7JL" secondAttribute="top" id="YoH-bk-uwv"/>
+                            <constraint firstItem="Glx-5I-7JL" firstAttribute="trailing" secondItem="Tfn-3m-nS4" secondAttribute="trailing" id="fgt-UT-eCV"/>
+                            <constraint firstItem="Glx-5I-7JL" firstAttribute="bottom" secondItem="Tfn-3m-nS4" secondAttribute="bottom" id="u9D-aj-Pg8"/>
+                        </constraints>
+                        <viewLayoutGuide key="safeArea" id="Glx-5I-7JL"/>
+                    </view>
+                    <connections>
+                        <outlet property="optionTable" destination="Tfn-3m-nS4" id="xls-RJ-I2h"/>
+                    </connections>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="VD0-e9-VNF" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="658" y="54"/>
         </scene>
     </scenes>
 </document>