Browse Source

as分类列表相关UI

iOS-Abel 2 years ago
parent
commit
24fd021876
44 changed files with 1117 additions and 41 deletions
  1. 49 41
      Asteria.xcodeproj/project.pbxproj
  2. 18 0
      Asteria/ASUI/alert/ASDefualtAlertV.h
  3. 34 0
      Asteria/ASUI/alert/ASDefualtAlertV.m
  4. 0 0
      Asteria/ASUI/alert/ASHomeAlertViewController.h
  5. 0 0
      Asteria/ASUI/alert/ASHomeAlertViewController.m
  6. 0 0
      Asteria/ASUI/alert/ASHomeAlertWindow.h
  7. 0 0
      Asteria/ASUI/alert/ASHomeAlertWindow.m
  8. 6 0
      Asteria/Fuction/Category/Category.xcassets/Contents.json
  9. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/AUD.imageset/AUD@2x.png
  10. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/AUD.imageset/AUD@3x.png
  11. 22 0
      Asteria/Fuction/Category/Category.xcassets/moneyType/AUD.imageset/Contents.json
  12. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/CAD.imageset/CAD@2x.png
  13. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/CAD.imageset/CAD@3x.png
  14. 22 0
      Asteria/Fuction/Category/Category.xcassets/moneyType/CAD.imageset/Contents.json
  15. 6 0
      Asteria/Fuction/Category/Category.xcassets/moneyType/Contents.json
  16. 22 0
      Asteria/Fuction/Category/Category.xcassets/moneyType/EUR.imageset/Contents.json
  17. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/EUR.imageset/EUR@2x.png
  18. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/EUR.imageset/EUR@3x.png
  19. 22 0
      Asteria/Fuction/Category/Category.xcassets/moneyType/GBP.imageset/Contents.json
  20. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/GBP.imageset/GBP@2x.png
  21. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/GBP.imageset/GBP@3x.png
  22. 22 0
      Asteria/Fuction/Category/Category.xcassets/moneyType/USD.imageset/Contents.json
  23. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/USD.imageset/USD@2x.png
  24. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/USD.imageset/USD@3x.png
  25. 22 0
      Asteria/Fuction/Category/Category.xcassets/moneyType/ZAR.imageset/Contents.json
  26. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/ZAR.imageset/ZAR@2x.png
  27. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/ZAR.imageset/ZAR@3x.png
  28. 22 0
      Asteria/Fuction/Category/Category.xcassets/moneyType/search_payMoneyType_select.imageset/Contents.json
  29. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/search_payMoneyType_select.imageset/search_payMoneyType_select@2x.png
  30. BIN
      Asteria/Fuction/Category/Category.xcassets/moneyType/search_payMoneyType_select.imageset/search_payMoneyType_select@3x.png
  31. 68 0
      Asteria/Fuction/Category/m/KWSearchSubTypeModel.h
  32. 77 0
      Asteria/Fuction/Category/m/KWSearchSubTypeModel.m
  33. 20 0
      Asteria/Fuction/Category/tipV/KWCustomLayout.h
  34. 104 0
      Asteria/Fuction/Category/tipV/KWCustomLayout.m
  35. 30 0
      Asteria/Fuction/Category/tipV/KWHisAndHotWordsView.h
  36. 179 0
      Asteria/Fuction/Category/tipV/KWHisAndHotWordsView.m
  37. 21 0
      Asteria/Fuction/Category/tipV/KWHisCollectHeaderView.h
  38. 101 0
      Asteria/Fuction/Category/tipV/KWHisCollectHeaderView.m
  39. 18 0
      Asteria/Fuction/Category/tipV/KWHisKeyWordCell.h
  40. 43 0
      Asteria/Fuction/Category/tipV/KWHisKeyWordCell.m
  41. 22 0
      Asteria/Fuction/Category/tipV/KWLenovoWordListView.h
  42. 105 0
      Asteria/Fuction/Category/tipV/KWLenovoWordListView.m
  43. 18 0
      Asteria/Fuction/Category/tipV/KWNoHisWordsCell.h
  44. 44 0
      Asteria/Fuction/Category/tipV/KWNoHisWordsCell.m

+ 49 - 41
Asteria.xcodeproj/project.pbxproj

@@ -79,12 +79,6 @@
 		81717D122A3C4AE000648139 /* APOnlySearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717CEB2A3C4ADE00648139 /* APOnlySearchViewController.m */; };
 		81717D132A3C4AE000648139 /* KWSearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717CEF2A3C4ADE00648139 /* KWSearchViewController.m */; };
 		81717D142A3C4AE000648139 /* APCategoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717CF02A3C4ADE00648139 /* APCategoryViewController.m */; };
-		81717D152A3C4AE000648139 /* KWHisKeyWordCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717CF32A3C4ADF00648139 /* KWHisKeyWordCell.m */; };
-		81717D162A3C4AE000648139 /* KWHisAndHotWordsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717CF62A3C4ADF00648139 /* KWHisAndHotWordsView.m */; };
-		81717D172A3C4AE000648139 /* KWHisCollectHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717CF72A3C4ADF00648139 /* KWHisCollectHeaderView.m */; };
-		81717D182A3C4AE000648139 /* KWCustomLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717CFA2A3C4ADF00648139 /* KWCustomLayout.m */; };
-		81717D192A3C4AE000648139 /* KWNoHisWordsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717CFB2A3C4ADF00648139 /* KWNoHisWordsCell.m */; };
-		81717D1A2A3C4AE000648139 /* KWLenovoWordListView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717CFC2A3C4ADF00648139 /* KWLenovoWordListView.m */; };
 		81717D1C2A3C4AE000648139 /* KWSearchSubTypeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D022A3C4ADF00648139 /* KWSearchSubTypeModel.m */; };
 		81717D1D2A3C4AE000648139 /* KWSearchSubTypeHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D042A3C4AE000648139 /* KWSearchSubTypeHeadView.m */; };
 		81717D1E2A3C4AE000648139 /* KWSearchMainTypeTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D062A3C4AE000648139 /* KWSearchMainTypeTableView.m */; };
@@ -94,6 +88,14 @@
 		81717D222A3C4AE000648139 /* KWSearchMainTypeCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D0F2A3C4AE000648139 /* KWSearchMainTypeCell.m */; };
 		81717D252A3C512700648139 /* Target_Category.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D242A3C512700648139 /* Target_Category.m */; };
 		81717D282A3C55CC00648139 /* CTMediator+Categorys.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D272A3C55CC00648139 /* CTMediator+Categorys.m */; };
+		81717D352A3D322700648139 /* KWHisKeyWordCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D292A3D322600648139 /* KWHisKeyWordCell.m */; };
+		81717D362A3D322700648139 /* KWLenovoWordListView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D2B2A3D322600648139 /* KWLenovoWordListView.m */; };
+		81717D372A3D322700648139 /* KWHisCollectHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D2D2A3D322600648139 /* KWHisCollectHeaderView.m */; };
+		81717D382A3D322700648139 /* KWNoHisWordsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D312A3D322700648139 /* KWNoHisWordsCell.m */; };
+		81717D392A3D322700648139 /* KWCustomLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D322A3D322700648139 /* KWCustomLayout.m */; };
+		81717D3A2A3D322700648139 /* KWHisAndHotWordsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D342A3D322700648139 /* KWHisAndHotWordsView.m */; };
+		81717D3C2A3D430C00648139 /* Category.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 81717D3B2A3D430C00648139 /* Category.xcassets */; };
+		81717D3F2A3D5EAD00648139 /* ASDefualtAlertV.m in Sources */ = {isa = PBXBuildFile; fileRef = 81717D3E2A3D5EAD00648139 /* ASDefualtAlertV.m */; };
 		8172449F29F3B2ED005FA9C9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8172449E29F3B2ED005FA9C9 /* AppDelegate.m */; };
 		817244AA29F3B2EE005FA9C9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 817244A929F3B2EE005FA9C9 /* Assets.xcassets */; };
 		817244AD29F3B2EE005FA9C9 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 817244AB29F3B2EE005FA9C9 /* LaunchScreen.storyboard */; };
@@ -349,18 +351,6 @@
 		81717CEE2A3C4ADE00648139 /* APOnlySearchViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APOnlySearchViewController.h; sourceTree = "<group>"; };
 		81717CEF2A3C4ADE00648139 /* KWSearchViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWSearchViewController.m; sourceTree = "<group>"; };
 		81717CF02A3C4ADE00648139 /* APCategoryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APCategoryViewController.m; sourceTree = "<group>"; };
-		81717CF32A3C4ADF00648139 /* KWHisKeyWordCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWHisKeyWordCell.m; sourceTree = "<group>"; };
-		81717CF42A3C4ADF00648139 /* KWNoHisWordsCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWNoHisWordsCell.h; sourceTree = "<group>"; };
-		81717CF52A3C4ADF00648139 /* KWCustomLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWCustomLayout.h; sourceTree = "<group>"; };
-		81717CF62A3C4ADF00648139 /* KWHisAndHotWordsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWHisAndHotWordsView.m; sourceTree = "<group>"; };
-		81717CF72A3C4ADF00648139 /* KWHisCollectHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWHisCollectHeaderView.m; sourceTree = "<group>"; };
-		81717CF82A3C4ADF00648139 /* KWLenovoWordListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWLenovoWordListView.h; sourceTree = "<group>"; };
-		81717CF92A3C4ADF00648139 /* KWHisKeyWordCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWHisKeyWordCell.h; sourceTree = "<group>"; };
-		81717CFA2A3C4ADF00648139 /* KWCustomLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWCustomLayout.m; sourceTree = "<group>"; };
-		81717CFB2A3C4ADF00648139 /* KWNoHisWordsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWNoHisWordsCell.m; sourceTree = "<group>"; };
-		81717CFC2A3C4ADF00648139 /* KWLenovoWordListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWLenovoWordListView.m; sourceTree = "<group>"; };
-		81717CFD2A3C4ADF00648139 /* KWHisCollectHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWHisCollectHeaderView.h; sourceTree = "<group>"; };
-		81717CFE2A3C4ADF00648139 /* KWHisAndHotWordsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWHisAndHotWordsView.h; sourceTree = "<group>"; };
 		81717D012A3C4ADF00648139 /* KWSearchSubTypeModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWSearchSubTypeModel.h; sourceTree = "<group>"; };
 		81717D022A3C4ADF00648139 /* KWSearchSubTypeModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWSearchSubTypeModel.m; sourceTree = "<group>"; };
 		81717D042A3C4AE000648139 /* KWSearchSubTypeHeadView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWSearchSubTypeHeadView.m; sourceTree = "<group>"; };
@@ -379,6 +369,21 @@
 		81717D242A3C512700648139 /* Target_Category.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Target_Category.m; sourceTree = "<group>"; };
 		81717D262A3C55CC00648139 /* CTMediator+Categorys.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CTMediator+Categorys.h"; sourceTree = "<group>"; };
 		81717D272A3C55CC00648139 /* CTMediator+Categorys.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "CTMediator+Categorys.m"; sourceTree = "<group>"; };
+		81717D292A3D322600648139 /* KWHisKeyWordCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWHisKeyWordCell.m; sourceTree = "<group>"; };
+		81717D2A2A3D322600648139 /* KWLenovoWordListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWLenovoWordListView.h; sourceTree = "<group>"; };
+		81717D2B2A3D322600648139 /* KWLenovoWordListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWLenovoWordListView.m; sourceTree = "<group>"; };
+		81717D2C2A3D322600648139 /* KWNoHisWordsCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWNoHisWordsCell.h; sourceTree = "<group>"; };
+		81717D2D2A3D322600648139 /* KWHisCollectHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWHisCollectHeaderView.m; sourceTree = "<group>"; };
+		81717D2E2A3D322600648139 /* KWHisCollectHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWHisCollectHeaderView.h; sourceTree = "<group>"; };
+		81717D2F2A3D322700648139 /* KWHisKeyWordCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWHisKeyWordCell.h; sourceTree = "<group>"; };
+		81717D302A3D322700648139 /* KWCustomLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWCustomLayout.h; sourceTree = "<group>"; };
+		81717D312A3D322700648139 /* KWNoHisWordsCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWNoHisWordsCell.m; sourceTree = "<group>"; };
+		81717D322A3D322700648139 /* KWCustomLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWCustomLayout.m; sourceTree = "<group>"; };
+		81717D332A3D322700648139 /* KWHisAndHotWordsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KWHisAndHotWordsView.h; sourceTree = "<group>"; };
+		81717D342A3D322700648139 /* KWHisAndHotWordsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KWHisAndHotWordsView.m; sourceTree = "<group>"; };
+		81717D3B2A3D430C00648139 /* Category.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Category.xcassets; sourceTree = "<group>"; };
+		81717D3D2A3D5EAD00648139 /* ASDefualtAlertV.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASDefualtAlertV.h; sourceTree = "<group>"; };
+		81717D3E2A3D5EAD00648139 /* ASDefualtAlertV.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASDefualtAlertV.m; sourceTree = "<group>"; };
 		8172449A29F3B2ED005FA9C9 /* Asteria.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Asteria.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		8172449D29F3B2ED005FA9C9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
 		8172449E29F3B2ED005FA9C9 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
@@ -679,6 +684,7 @@
 			children = (
 				81C3B45029F669C900D79294 /* ColorDefine.h */,
 				8199001E2A0206F7006FE68C /* SizeDefine.h */,
+				81717C962A3BF1AD00648139 /* alert */,
 				81C3B44B29F6691300D79294 /* Extensions */,
 				8199001F2A020A4F006FE68C /* Tools */,
 				81E257F72A122AAB004EEF71 /* Icons */,
@@ -730,7 +736,6 @@
 		81601FE32A2D938B00E4A8F1 /* Home */ = {
 			isa = PBXGroup;
 			children = (
-				81717C962A3BF1AD00648139 /* alert */,
 				81C326672A36F019002EF442 /* vm */,
 				816020142A2F065700E4A8F1 /* Home.xcassets */,
 				81601FE42A2DB19300E4A8F1 /* ASHomeViewController.h */,
@@ -840,6 +845,8 @@
 				81717C982A3BF1DD00648139 /* ASHomeAlertWindow.m */,
 				81717C9A2A3BF1F100648139 /* ASHomeAlertViewController.h */,
 				81717C9B2A3BF1F100648139 /* ASHomeAlertViewController.m */,
+				81717D3D2A3D5EAD00648139 /* ASDefualtAlertV.h */,
+				81717D3E2A3D5EAD00648139 /* ASDefualtAlertV.m */,
 			);
 			path = alert;
 			sourceTree = "<group>";
@@ -854,6 +861,7 @@
 				81717CE52A3C4ADE00648139 /* vm */,
 				81717D232A3C512700648139 /* Target_Category.h */,
 				81717D242A3C512700648139 /* Target_Category.m */,
+				81717D3B2A3D430C00648139 /* Category.xcassets */,
 			);
 			path = Category;
 			sourceTree = "<group>";
@@ -885,21 +893,20 @@
 		81717CF22A3C4ADF00648139 /* tipV */ = {
 			isa = PBXGroup;
 			children = (
-				81717CF32A3C4ADF00648139 /* KWHisKeyWordCell.m */,
-				81717CF42A3C4ADF00648139 /* KWNoHisWordsCell.h */,
-				81717CF52A3C4ADF00648139 /* KWCustomLayout.h */,
-				81717CF62A3C4ADF00648139 /* KWHisAndHotWordsView.m */,
-				81717CF72A3C4ADF00648139 /* KWHisCollectHeaderView.m */,
-				81717CF82A3C4ADF00648139 /* KWLenovoWordListView.h */,
-				81717CF92A3C4ADF00648139 /* KWHisKeyWordCell.h */,
-				81717CFA2A3C4ADF00648139 /* KWCustomLayout.m */,
-				81717CFB2A3C4ADF00648139 /* KWNoHisWordsCell.m */,
-				81717CFC2A3C4ADF00648139 /* KWLenovoWordListView.m */,
-				81717CFD2A3C4ADF00648139 /* KWHisCollectHeaderView.h */,
-				81717CFE2A3C4ADF00648139 /* KWHisAndHotWordsView.h */,
+				81717D302A3D322700648139 /* KWCustomLayout.h */,
+				81717D322A3D322700648139 /* KWCustomLayout.m */,
+				81717D332A3D322700648139 /* KWHisAndHotWordsView.h */,
+				81717D342A3D322700648139 /* KWHisAndHotWordsView.m */,
+				81717D2E2A3D322600648139 /* KWHisCollectHeaderView.h */,
+				81717D2D2A3D322600648139 /* KWHisCollectHeaderView.m */,
+				81717D2F2A3D322700648139 /* KWHisKeyWordCell.h */,
+				81717D292A3D322600648139 /* KWHisKeyWordCell.m */,
+				81717D2A2A3D322600648139 /* KWLenovoWordListView.h */,
+				81717D2B2A3D322600648139 /* KWLenovoWordListView.m */,
+				81717D2C2A3D322600648139 /* KWNoHisWordsCell.h */,
+				81717D312A3D322700648139 /* KWNoHisWordsCell.m */,
 			);
-			name = tipV;
-			path = ../../../../AP/westkissMob/westkissMob/Fuction/Search/tipV;
+			path = tipV;
 			sourceTree = "<group>";
 		};
 		81717D002A3C4ADF00648139 /* m */ = {
@@ -908,8 +915,7 @@
 				81717D012A3C4ADF00648139 /* KWSearchSubTypeModel.h */,
 				81717D022A3C4ADF00648139 /* KWSearchSubTypeModel.m */,
 			);
-			name = m;
-			path = ../../../../AP/westkissMob/westkissMob/Fuction/Search/m;
+			path = m;
 			sourceTree = "<group>";
 		};
 		81717D032A3C4AE000648139 /* v */ = {
@@ -1592,6 +1598,7 @@
 				814F5D102A11B76F003847A9 /* Roboto-Thin.ttf in Resources */,
 				816020152A2F065700E4A8F1 /* Home.xcassets in Resources */,
 				814F5D052A11B76F003847A9 /* Roboto-Medium.ttf in Resources */,
+				81717D3C2A3D430C00648139 /* Category.xcassets in Resources */,
 				814F5D0C2A11B76F003847A9 /* Roboto-Italic.ttf in Resources */,
 				814F5D0F2A11B76F003847A9 /* Roboto-Bold.ttf in Resources */,
 				814F5D0B2A11B76F003847A9 /* Roboto-LightItalic.ttf in Resources */,
@@ -1734,12 +1741,14 @@
 				81C326712A37020A002EF442 /* ASProductListMenuHeaderView.m in Sources */,
 				81601FF92A2DC78300E4A8F1 /* WMZBannerControl.m in Sources */,
 				81717C912A3BE39C00648139 /* ASProductSortFilterView.m in Sources */,
+				81717D382A3D322700648139 /* KWNoHisWordsCell.m in Sources */,
 				9AD345FA2A08D60F005CA070 /* ZFLandscapeWindow.m in Sources */,
 				81E257EE2A120756004EEF71 /* ASUserCenterTopView.m in Sources */,
 				81C326622A36B33B002EF442 /* ASHomeActiveView.m in Sources */,
 				9AD346042A08D60F005CA070 /* ZFKVOController.m in Sources */,
 				81717CA12A3C0A3500648139 /* KWProductMenuFilterItemHeaderView.m in Sources */,
 				81C326662A36B794002EF442 /* VerScrollTextView.m in Sources */,
+				81717D372A3D322700648139 /* KWHisCollectHeaderView.m in Sources */,
 				9A8DD8C82A0B93F700573324 /* GoodsDetailsVM.m in Sources */,
 				9AD346132A08D60F005CA070 /* ZFLoadingView.m in Sources */,
 				9ACBEC212A14585300A8F97A /* CTMediator+ASTargerts.m in Sources */,
@@ -1769,6 +1778,7 @@
 				81717D1C2A3C4AE000648139 /* KWSearchSubTypeModel.m in Sources */,
 				8160201F2A2F11AB00E4A8F1 /* ASHomeTipCollectCell.m in Sources */,
 				816020042A2DCC0200E4A8F1 /* ASHomeBannerModel.m in Sources */,
+				81717D3F2A3D5EAD00648139 /* ASDefualtAlertV.m in Sources */,
 				819900222A020A6F006FE68C /* LYTools.m in Sources */,
 				816020072A2DD4FB00E4A8F1 /* Target_Home.m in Sources */,
 				816020132A2EE5A200E4A8F1 /* ASCategaryCollectCell.m in Sources */,
@@ -1776,9 +1786,9 @@
 				9AD345F92A08D60F005CA070 /* ZFPlayerController.m in Sources */,
 				9AD345AC2A08D59A005CA070 /* WKM_goodsBanner.m in Sources */,
 				81EC476F2A33F82C00516573 /* ASHomeImgCell.m in Sources */,
+				81717D3A2A3D322700648139 /* KWHisAndHotWordsView.m in Sources */,
 				81354BE72A28786C0082C93A /* ASProductBaseModel.m in Sources */,
 				9A8DD8C52A0B8F1700573324 /* As_GoodsSizeC.m in Sources */,
-				81717D152A3C4AE000648139 /* KWHisKeyWordCell.m in Sources */,
 				8134C1BD2A1372D5006EB0EC /* ASUserCenterTableHeadView.m in Sources */,
 				9AD346002A08D60F005CA070 /* ZFPresentTransition.m in Sources */,
 				81717D112A3C4AE000648139 /* KWSearchViewModel.m in Sources */,
@@ -1787,6 +1797,7 @@
 				81354C0A2A289C350082C93A /* KWScrollOffsetView.m in Sources */,
 				81354C032A289A070082C93A /* HomeFilterModel.m in Sources */,
 				81717CAB2A3C359E00648139 /* ASProductlistFilterPriceCollectCell.m in Sources */,
+				81717D352A3D322700648139 /* KWHisKeyWordCell.m in Sources */,
 				9AD364D12A05EC7800452C7A /* AS_TabBarViewController.m in Sources */,
 				9AD345FB2A08D60F005CA070 /* ZFOrientationObserver.m in Sources */,
 				9AD346192A08D679005CA070 /* GoodsBannerModel.m in Sources */,
@@ -1795,7 +1806,6 @@
 				9AD3459E2A08D545005CA070 /* GoodsDetailSrcView.m in Sources */,
 				9AD346022A08D60F005CA070 /* ZFPlayerView.m in Sources */,
 				81BEA6832A2D7CF3009D36C4 /* UITableView+ASBase.m in Sources */,
-				81717D162A3C4AE000648139 /* KWHisAndHotWordsView.m in Sources */,
 				81717C992A3BF1DD00648139 /* ASHomeAlertWindow.m in Sources */,
 				81C3B44429F6612800D79294 /* ASBaseViewController.m in Sources */,
 				81C3266A2A36F035002EF442 /* ASProductListViewModel.m in Sources */,
@@ -1804,12 +1814,12 @@
 				81601FFF2A2DC8E700E4A8F1 /* ASHomeBannerCell.m in Sources */,
 				81717D132A3C4AE000648139 /* KWSearchViewController.m in Sources */,
 				9AD6A5442A1218E8001DE3D9 /* PassWordSecureBtnV.m in Sources */,
+				81717D392A3D322700648139 /* KWCustomLayout.m in Sources */,
 				81C3B44A29F6661500D79294 /* ASBaseNavController.m in Sources */,
 				9AD3460C2A08D60F005CA070 /* ZFVolumeBrightnessView.m in Sources */,
 				9AD346072A08D60F005CA070 /* UIViewController+ZFPlayerRotation.m in Sources */,
 				8160200D2A2DD5C000E4A8F1 /* CTMediator+UserCenter.m in Sources */,
 				9ACBEC2B2A14CCA300A8F97A /* ThirdPartService.m in Sources */,
-				81717D1A2A3C4AE000648139 /* KWLenovoWordListView.m in Sources */,
 				81C3265F2A36B284002EF442 /* ASProductListViewController.m in Sources */,
 				9AD346142A08D60F005CA070 /* ZFSpeedLoadingView.m in Sources */,
 				9AD346062A08D60F005CA070 /* ZFReachabilityManager.m in Sources */,
@@ -1827,8 +1837,8 @@
 				9AD345A82A08D571005CA070 /* TYCyclePagerView.m in Sources */,
 				9AD346202A08E30E005CA070 /* SelectVCollectionViewCell.m in Sources */,
 				81601FFB2A2DC78300E4A8F1 /* WMZBannerOverLayout.m in Sources */,
-				81717D172A3C4AE000648139 /* KWHisCollectHeaderView.m in Sources */,
 				81354C002A2899CB0082C93A /* KWMineMoreProductModel.m in Sources */,
+				81717D362A3D322700648139 /* KWLenovoWordListView.m in Sources */,
 				8134C1BA2A1372A7006EB0EC /* ASUserCenterEnterItemV.m in Sources */,
 				9AD3460A2A08D60F005CA070 /* ZFUtilities.m in Sources */,
 				81354BFC2A28998B0082C93A /* KWMineMoreProductTypeCell.m in Sources */,
@@ -1852,7 +1862,6 @@
 				81717D102A3C4AE000648139 /* KWHisAndHotWordsViewModel.m in Sources */,
 				9AD3460D2A08D60F005CA070 /* ZFLandScapeControlView.m in Sources */,
 				9AD364C62A05E73E00452C7A /* AS_GoodsDetailsC.m in Sources */,
-				81717D182A3C4AE000648139 /* KWCustomLayout.m in Sources */,
 				816020102A2EE55F00E4A8F1 /* ASCategaryListCell.m in Sources */,
 				9AD3460B2A08D60F005CA070 /* UIView+ZFFrame.m in Sources */,
 				81E257FD2A12340E004EEF71 /* ASEnterItemV.m in Sources */,
@@ -1861,7 +1870,6 @@
 				9A5C64582A12064300CBB185 /* AS_LoginC.m in Sources */,
 				81717D122A3C4AE000648139 /* APOnlySearchViewController.m in Sources */,
 				9AD345FD2A08D60F005CA070 /* ZFPersentInteractiveTransition.m in Sources */,
-				81717D192A3C4AE000648139 /* KWNoHisWordsCell.m in Sources */,
 				8160200A2A2DD59E00E4A8F1 /* CTMediator+Home.m in Sources */,
 				81717C9C2A3BF1F100648139 /* ASHomeAlertViewController.m in Sources */,
 				9AD345FC2A08D60F005CA070 /* ZFPlayerLogManager.m in Sources */,

+ 18 - 0
Asteria/ASUI/alert/ASDefualtAlertV.h

@@ -0,0 +1,18 @@
+//
+//  ASDefualtAlertV.h
+//  Asteria
+//
+//  Created by iOS on 2023/6/17.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ASDefualtAlertV : UIView
+
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 34 - 0
Asteria/ASUI/alert/ASDefualtAlertV.m

@@ -0,0 +1,34 @@
+//
+//  ASDefualtAlertV.m
+//  Asteria
+//
+//  Created by iOS on 2023/6/17.
+//
+
+#import "ASDefualtAlertV.h"
+
+@interface ASDefualtAlertV ()
+
+@property (nonatomic, strong) UIButton *closeBt;
+@property (nonatomic, strong) UILabel *msgLb;
+
+@end
+
+@implementation ASDefualtAlertV
+
+
+
+
+- (UILabel *)msgLb {
+    if (!_msgLb) {
+        UILabel *lb = [UILabel baseLb];
+        lb.textAlignment = NSTextAlignmentCenter;
+        lb.font = [UIFont fontWithName:Rob_Regular size:14];
+        lb.numberOfLines = 0;
+        lb.textColor = Col_000;
+        _msgLb = lb;
+    }
+    return _msgLb;
+}
+
+@end

Asteria/Fuction/Home/alert/ASHomeAlertViewController.h → Asteria/ASUI/alert/ASHomeAlertViewController.h


Asteria/Fuction/Home/alert/ASHomeAlertViewController.m → Asteria/ASUI/alert/ASHomeAlertViewController.m


Asteria/Fuction/Home/alert/ASHomeAlertWindow.h → Asteria/ASUI/alert/ASHomeAlertWindow.h


Asteria/Fuction/Home/alert/ASHomeAlertWindow.m → Asteria/ASUI/alert/ASHomeAlertWindow.m


+ 6 - 0
Asteria/Fuction/Category/Category.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/AUD.imageset/AUD@2x.png


BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/AUD.imageset/AUD@3x.png


+ 22 - 0
Asteria/Fuction/Category/Category.xcassets/moneyType/AUD.imageset/Contents.json

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

BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/CAD.imageset/CAD@2x.png


BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/CAD.imageset/CAD@3x.png


+ 22 - 0
Asteria/Fuction/Category/Category.xcassets/moneyType/CAD.imageset/Contents.json

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

+ 6 - 0
Asteria/Fuction/Category/Category.xcassets/moneyType/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
Asteria/Fuction/Category/Category.xcassets/moneyType/EUR.imageset/Contents.json

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

BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/EUR.imageset/EUR@2x.png


BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/EUR.imageset/EUR@3x.png


+ 22 - 0
Asteria/Fuction/Category/Category.xcassets/moneyType/GBP.imageset/Contents.json

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

BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/GBP.imageset/GBP@2x.png


BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/GBP.imageset/GBP@3x.png


+ 22 - 0
Asteria/Fuction/Category/Category.xcassets/moneyType/USD.imageset/Contents.json

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

BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/USD.imageset/USD@2x.png


BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/USD.imageset/USD@3x.png


+ 22 - 0
Asteria/Fuction/Category/Category.xcassets/moneyType/ZAR.imageset/Contents.json

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

BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/ZAR.imageset/ZAR@2x.png


BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/ZAR.imageset/ZAR@3x.png


+ 22 - 0
Asteria/Fuction/Category/Category.xcassets/moneyType/search_payMoneyType_select.imageset/Contents.json

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

BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/search_payMoneyType_select.imageset/search_payMoneyType_select@2x.png


BIN
Asteria/Fuction/Category/Category.xcassets/moneyType/search_payMoneyType_select.imageset/search_payMoneyType_select@3x.png


+ 68 - 0
Asteria/Fuction/Category/m/KWSearchSubTypeModel.h

@@ -0,0 +1,68 @@
+//
+//  KWSearchSubTypeModel.h
+//  westkissMob
+//
+//  Created by iOS on 2022/9/13.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KWSearchSubTypeModel : NSObject
+
+@property (nonatomic, copy) NSString *Id;
+@property (nonatomic, copy) NSString *title;
+@property (nonatomic, copy) NSString *thumbnail_url;
+
+
+@end
+
+NS_ASSUME_NONNULL_END
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KWSubTypeSectionModel : NSObject
+
+@property (nonatomic, copy) NSString *title;
+@property (nonatomic, copy) NSString *Id;
+@property (nonatomic, copy) NSString *thumbnail_url;
+@property (nonatomic, assign) BOOL isOpen;
+@property (nonatomic, strong) NSArray<KWSearchSubTypeModel *>*children;
+
+@property (nonatomic, assign) BOOL isMoneyType;
+
+@end
+NS_ASSUME_NONNULL_END
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KWMainTypeModel : NSObject
+
+@property (nonatomic, copy) NSString *title;
+@property (nonatomic, copy) NSString *Id;
+@property (nonatomic, copy) NSString *thumbnail_url;
+@property (nonatomic, strong) NSArray<KWSubTypeSectionModel *>*children;
+
+@property (nonatomic, assign) BOOL isMoneyType;
+
+
+@end
+NS_ASSUME_NONNULL_END
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KWSearchHotKeyModel : NSObject
+
+@property (nonatomic, copy) NSString *title;
+@property (nonatomic, assign) NSInteger type;
+@property (nonatomic, copy) NSString *thumbnail_url;
+@property (nonatomic, copy) NSString *code;
+
+
+@end
+NS_ASSUME_NONNULL_END
+
+
+
+
+

+ 77 - 0
Asteria/Fuction/Category/m/KWSearchSubTypeModel.m

@@ -0,0 +1,77 @@
+//
+//  KWSearchSubTypeModel.m
+//  westkissMob
+//
+//  Created by iOS on 2022/9/13.
+//
+
+#import "KWSearchSubTypeModel.h"
+
+@implementation KWSearchSubTypeModel
+
++ (NSDictionary *)mj_replacedKeyFromPropertyName {
+    return @{
+        @"Id": @"id",
+        @"title": @"name",
+    };
+}
+
+
+
+@end
+
+@implementation KWSubTypeSectionModel
+
+
++ (NSDictionary *)mj_replacedKeyFromPropertyName {
+    return @{
+        @"Id": @"id",
+        @"title": @"name",
+    };
+}
+
++ (NSDictionary *)mj_objectClassInArray{
+    
+    return @{
+        
+        @"children" : [KWSearchSubTypeModel class],
+        
+    };
+    
+    
+    
+}
+
+@end
+
+@implementation KWMainTypeModel
+
+
++ (NSDictionary *)mj_objectClassInArray{
+    
+    return @{
+        
+        @"children" : [KWSubTypeSectionModel class],
+        
+    };
+    
+    
+    
+}
+
+
+
++ (NSDictionary *)mj_replacedKeyFromPropertyName {
+    return @{
+        @"Id": @"id",
+        @"title": @"name",
+    };
+}
+
+@end
+
+@implementation KWSearchHotKeyModel
+
+
+
+@end

+ 20 - 0
Asteria/Fuction/Category/tipV/KWCustomLayout.h

@@ -0,0 +1,20 @@
+//
+//  KWCustomLayout.h
+//  westkissMob
+//
+//  Created by iOS on 2022/9/14.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KWCustomLayout : UICollectionViewFlowLayout
+
+@end
+
+@protocol UICollectionViewDelegateLeftAlignedLayout <UICollectionViewDelegateFlowLayout>
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 104 - 0
Asteria/Fuction/Category/tipV/KWCustomLayout.m

@@ -0,0 +1,104 @@
+//
+//  KWCustomLayout.m
+//  westkissMob
+//
+//  Created by iOS on 2022/9/14.
+//
+
+#import "KWCustomLayout.h"
+
+@interface UICollectionViewLayoutAttributes (LeftAligned)
+
+- (void)leftAlignFrameWithSectionInset:(UIEdgeInsets)sectionInset;
+
+@end
+
+@implementation UICollectionViewLayoutAttributes (LeftAligned)
+
+- (void)leftAlignFrameWithSectionInset:(UIEdgeInsets)sectionInset
+{
+    CGRect frame = self.frame;
+    frame.origin.x = sectionInset.left;
+    self.frame = frame;
+}
+
+@end
+
+@implementation KWCustomLayout
+
+#pragma mark - UICollectionViewLayout
+
+- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
+    NSArray *originalAttributes = [super layoutAttributesForElementsInRect:rect];
+    NSMutableArray *updatedAttributes = [NSMutableArray arrayWithArray:originalAttributes];
+    for (UICollectionViewLayoutAttributes *attributes in originalAttributes) {
+        if (!attributes.representedElementKind) {
+            NSUInteger index = [updatedAttributes indexOfObject:attributes];
+            updatedAttributes[index] = [self layoutAttributesForItemAtIndexPath:attributes.indexPath];
+        }
+    }
+
+    return updatedAttributes;
+}
+
+- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath {
+    UICollectionViewLayoutAttributes* currentItemAttributes = [[super layoutAttributesForItemAtIndexPath:indexPath] copy];
+    UIEdgeInsets sectionInset = [self evaluatedSectionInsetForItemAtIndex:indexPath.section];
+
+    BOOL isFirstItemInSection = indexPath.item == 0;
+    CGFloat layoutWidth = CGRectGetWidth(self.collectionView.frame) - sectionInset.left - sectionInset.right;
+
+    if (isFirstItemInSection) {
+        [currentItemAttributes leftAlignFrameWithSectionInset:sectionInset];
+        return currentItemAttributes;
+    }
+
+    NSIndexPath* previousIndexPath = [NSIndexPath indexPathForItem:indexPath.item-1 inSection:indexPath.section];
+    CGRect previousFrame = [self layoutAttributesForItemAtIndexPath:previousIndexPath].frame;
+    CGFloat previousFrameRightPoint = previousFrame.origin.x + previousFrame.size.width;
+    CGRect currentFrame = currentItemAttributes.frame;
+    CGRect strecthedCurrentFrame = CGRectMake(sectionInset.left,
+                                              currentFrame.origin.y,
+                                              layoutWidth,
+                                              currentFrame.size.height);
+    // if the current frame, once left aligned to the left and stretched to the full collection view
+    // width intersects the previous frame then they are on the same line
+    BOOL isFirstItemInRow = !CGRectIntersectsRect(previousFrame, strecthedCurrentFrame);
+
+    if (isFirstItemInRow) {
+        // make sure the first item on a line is left aligned
+        [currentItemAttributes leftAlignFrameWithSectionInset:sectionInset];
+        return currentItemAttributes;
+    }
+
+    CGRect frame = currentItemAttributes.frame;
+    frame.origin.x = previousFrameRightPoint + [self evaluatedMinimumInteritemSpacingForSectionAtIndex:indexPath.section];
+    currentItemAttributes.frame = frame;
+    return currentItemAttributes;
+}
+
+- (CGFloat)evaluatedMinimumInteritemSpacingForSectionAtIndex:(NSInteger)sectionIndex
+{
+    if ([self.collectionView.delegate respondsToSelector:@selector(collectionView:layout:minimumInteritemSpacingForSectionAtIndex:)]) {
+        id<UICollectionViewDelegateLeftAlignedLayout> delegate = (id<UICollectionViewDelegateLeftAlignedLayout>)self.collectionView.delegate;
+
+        return [delegate collectionView:self.collectionView layout:self minimumInteritemSpacingForSectionAtIndex:sectionIndex];
+    } else {
+        return self.minimumInteritemSpacing;
+    }
+}
+
+- (UIEdgeInsets)evaluatedSectionInsetForItemAtIndex:(NSInteger)index
+{
+    if ([self.collectionView.delegate respondsToSelector:@selector(collectionView:layout:insetForSectionAtIndex:)]) {
+        id<UICollectionViewDelegateLeftAlignedLayout> delegate = (id<UICollectionViewDelegateLeftAlignedLayout>)self.collectionView.delegate;
+
+        return [delegate collectionView:self.collectionView layout:self insetForSectionAtIndex:index];
+    } else {
+        return self.sectionInset;
+    }
+}
+
+@end
+
+

+ 30 - 0
Asteria/Fuction/Category/tipV/KWHisAndHotWordsView.h

@@ -0,0 +1,30 @@
+//
+//  KWHisAndHotWordsView.h
+//  westkissMob
+//
+//  Created by iOS on 2022/9/14.
+//
+
+#import <UIKit/UIKit.h>
+#import "KWHisAndHotWordsViewModel.h"
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KWHisAndHotWordsView : UIView
+
+@property (nonatomic, assign) BOOL isSearch;
+
+@property (nonatomic,strong) NSArray<NSString *> *hisWords;
+//@property (nonatomic,strong) NSArray<NSString *> *hotWords;
+
+@property (nonatomic, copy) void(^callBack)(NSString *word);
+@property (nonatomic, copy) void(^hotCallBack)(KWSearchHotKeyModel *hot);
+
+@property (nonatomic,strong) UICollectionView *collectV;
+
+@property (nonatomic,strong) KWHisAndHotWordsViewModel *vm;
+
+- (void)reloadData;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 179 - 0
Asteria/Fuction/Category/tipV/KWHisAndHotWordsView.m

@@ -0,0 +1,179 @@
+//
+//  KWHisAndHotWordsView.m
+//  westkissMob
+//
+//  Created by iOS on 2022/9/14.
+//
+
+#import "KWHisAndHotWordsView.h"
+#import "KWCustomLayout.h"
+#import "KWHisKeyWordCell.h"
+#import "KWHisCollectHeaderView.h"
+#import "KWNoHisWordsCell.h"
+
+
+
+@interface KWHisAndHotWordsView () <UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
+
+
+
+
+@end
+
+@implementation KWHisAndHotWordsView
+
+- (void)reloadData {
+    self.hisWords = [self.vm getLocalSearchDatas];
+    @weakify(self);
+        [self.vm getHotKeyList:^{
+            [weak_self.collectV reloadData];
+        }];
+    [self.collectV reloadData];
+    
+}
+
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self configSubV];
+    }
+    return self;
+}
+
+-(void)configSubV {
+    self.vm = [[KWHisAndHotWordsViewModel alloc] init];
+    
+    self.backgroundColor = [UIColor colorWithHexString:@"f8f8f8"];
+    self.collectV.backgroundColor = [UIColor colorWithHexString:@"f8f8f8"];
+    [self addSubview:self.collectV];
+    [self.collectV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self);
+    }];
+    
+    @weakify(self);
+    [self.vm setDataReload:^{
+        [weak_self reloadData];
+    }];
+}
+
+
+- (UICollectionView *)collectV {
+    if (!_collectV) {
+        
+        KWCustomLayout *layout = [[KWCustomLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(5, 20, 20, 20);
+        layout.minimumLineSpacing = 10;
+        layout.minimumInteritemSpacing = 10;
+         layout.scrollDirection = UICollectionViewScrollDirectionVertical;
+        
+        UICollectionView *v = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 400) collectionViewLayout:layout];
+        v.delegate = self;
+        v.dataSource = self;
+        [v registerClass:[KWHisKeyWordCell class] forCellWithReuseIdentifier:@"cell"];
+        [v registerClass:[KWNoHisWordsCell class] forCellWithReuseIdentifier:@"KWNoHisWordsCell"];
+        [v registerClass:[KWHisCollectHeaderView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"];
+        _collectV = v;
+    }
+    return  _collectV;
+}
+
+#pragma mark - UICollectionViewDelegate,UICollectionViewDelegateFlowLayout,UICollectionViewDataSource
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.callBack) {
+        NSString *title;
+        if (indexPath.section == 0) {
+            title = _hisWords[indexPath.item];
+            self.callBack(title);
+            
+        } else {
+            KWSearchHotKeyModel *keyM = self.vm.hotKeys[indexPath.item];
+            if (self.hotCallBack) {
+                self.hotCallBack(keyM);
+            }
+            
+        }
+    }
+}
+
+- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
+    return  2;
+}
+
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    if (section == 0) {
+        if (_hisWords.count == 0) {
+            return 1;
+        }
+        return _hisWords.count;
+    }
+    return self.vm.hotKeys.count;
+}
+
+- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.section == 0 && _hisWords.count == 0) {
+        KWNoHisWordsCell *ce = [collectionView dequeueReusableCellWithReuseIdentifier:@"KWNoHisWordsCell" forIndexPath:indexPath];
+        return ce;
+    }
+    
+    KWHisKeyWordCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
+    NSString *title;
+    if (indexPath.section == 0) {
+        title = _hisWords[indexPath.item];
+        
+    } else {
+        title = self.vm.hotKeys[indexPath.item].title;
+        
+    }
+    cell.titleLb.text = title;
+    
+    return cell;
+}
+
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.section == 0 && _hisWords.count == 0) {
+        return CGSizeMake(KScreenWidth-40, 90);
+    }
+    
+    NSString *title;
+    if (indexPath.section == 0) {
+        title = _hisWords[indexPath.item];
+        
+    } else {
+        title = self.vm.hotKeys[indexPath.item].title;
+        
+    }
+    CGFloat wid = [title boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 34) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont fontWithName:Rob_Regular size:12]} context:nil].size.width + 12;
+//    CGFloat wid = [title widthForFont:[UIFont fontWithName:Rob_Regular size:12]] + 12;
+    wid = wid > KScreenWidth-40 ? KScreenWidth - 40 : wid;
+    return CGSizeMake(wid, 34);
+    
+}
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
+    if (section == 1 && self.vm.hotKeys.count == 0) {
+        return CGSizeZero;
+    }
+    return CGSizeMake(KScreenWidth-40, 40);
+}
+
+- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
+    if ([kind isEqualToString:UICollectionElementKindSectionHeader] ) {
+        KWHisCollectHeaderView *header = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"header" forIndexPath:indexPath];
+        header.titleLb.text = indexPath.section == 1 ? @"HOT SEARCH" : @"SEARCH HISTORY";
+        header.imgV.hidden = indexPath.section == 1;
+        header.btn.hidden = indexPath.section == 1;
+        @weakify(self);
+        header.callBack = ^{
+            [weak_self.vm cleanLocalHisDatas];
+            [weak_self reloadData];
+        };
+        return  header;
+    }
+    return nil;
+}
+
+
+@end

+ 21 - 0
Asteria/Fuction/Category/tipV/KWHisCollectHeaderView.h

@@ -0,0 +1,21 @@
+//
+//  KWHisCollectHeaderView.h
+//  westkissMob
+//
+//  Created by iOS on 2022/9/14.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KWHisCollectHeaderView : UICollectionReusableView
+
+@property (nonatomic, strong) UILabel *titleLb;
+@property (nonatomic, strong) UIImageView *imgV;
+@property (nonatomic, strong) UIButton *btn;
+@property (nonatomic, copy) btnClickBlock callBack;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 101 - 0
Asteria/Fuction/Category/tipV/KWHisCollectHeaderView.m

@@ -0,0 +1,101 @@
+//
+//  KWHisCollectHeaderView.m
+//  westkissMob
+//
+//  Created by iOS on 2022/9/14.
+//
+
+#import "KWHisCollectHeaderView.h"
+
+@interface KWHisCollectHeaderView ()
+
+
+
+
+@end
+
+@implementation KWHisCollectHeaderView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self configSubV];
+    }
+    return self;
+}
+
+- (void)configSubV {
+    self.backgroundColor = [UIColor colorWithHexString:@"#f8f8f8"];
+    
+    
+    [self addSubview:self.titleLb];
+    [self addSubview:self.imgV];
+    [self addSubview:self.btn];
+    
+    [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(13);
+        make.centerX.equalTo(self);
+        make.bottom.equalTo(self).offset(-7);
+        make.height.equalTo(@20);
+    }];
+    [self.imgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.titleLb.mas_right).offset(10);
+        make.bottom.equalTo(self).offset(-10);
+        make.right.equalTo(self).offset(-20);
+        make.width.equalTo(@24);
+        make.height.equalTo(@24);
+    }];
+    
+    [self.btn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self.imgV);
+    }];
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+
+- (UILabel *)titleLb {
+    if (!_titleLb) {
+        UILabel *lb = [[UILabel alloc] init];
+        lb.font = [UIFont fontWithName:Rob_Bold size:14];
+        lb.textColor = [UIColor colorWithHexString:@"#0b0b0b"];
+        lb.textAlignment = NSTextAlignmentCenter;
+        lb.backgroundColor = [UIColor clearColor];
+        lb.numberOfLines = 1;
+        _titleLb = lb;
+    }
+    return _titleLb;
+}
+
+-(UIImageView *)imgV {
+    if (!_imgV) {
+        UIImageView *img = [[UIImageView alloc] init];
+        img.contentMode = UIViewContentModeScaleAspectFit;
+        img.image = [UIImage imageNamed:@"search_his_clean"];
+        _imgV = img;
+    }
+    return _imgV;
+}
+
+
+-(UIButton *)btn {
+    if (!_btn) {
+        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
+        [bt addTarget:self action:@selector(clickAction) forControlEvents:UIControlEventTouchUpInside];
+        bt.backgroundColor = UIColor.clearColor;
+        [bt setTitle:@"" forState:UIControlStateNormal];
+        _btn = bt;
+    }
+    return  _btn;
+}
+
+- (void)clickAction {
+    if (self.callBack) {
+        self.callBack();
+    }
+}
+
+@end

+ 18 - 0
Asteria/Fuction/Category/tipV/KWHisKeyWordCell.h

@@ -0,0 +1,18 @@
+//
+//  KWHisKeyWordCell.h
+//  westkissMob
+//
+//  Created by iOS on 2022/9/14.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KWHisKeyWordCell : UICollectionViewCell
+
+@property (nonatomic, strong) UILabel *titleLb;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 43 - 0
Asteria/Fuction/Category/tipV/KWHisKeyWordCell.m

@@ -0,0 +1,43 @@
+//
+//  KWHisKeyWordCell.m
+//  westkissMob
+//
+//  Created by iOS on 2022/9/14.
+//
+
+#import "KWHisKeyWordCell.h"
+
+@implementation KWHisKeyWordCell
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self configSubV];
+    }
+    return self;
+}
+
+-(void)configSubV {
+    self.backgroundColor = [UIColor whiteColor];
+    self.layer.cornerRadius = 2;
+    [self addSubview:self.titleLb];
+    [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(self).offset(5);
+        make.center.equalTo(self);
+    }];
+}
+
+
+
+- (UILabel *)titleLb {
+    if (!_titleLb) {
+        UILabel * lb = [[UILabel alloc] init];
+        lb.font = [UIFont fontWithName:Rob_Regular size:12];
+        lb.textAlignment = NSTextAlignmentCenter;
+        lb.textColor = [UIColor colorWithHexString:@"#1F1D2B"];
+        _titleLb = lb;
+    }
+    return  _titleLb;
+}
+
+@end

+ 22 - 0
Asteria/Fuction/Category/tipV/KWLenovoWordListView.h

@@ -0,0 +1,22 @@
+//
+//  KWLenovoWordListView.h
+//  westkissMob
+//
+//  Created by iOS on 2022/9/14.
+//
+
+#import <UIKit/UIKit.h>
+#import "KWSearchSubTypeModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KWLenovoWordListView : UIView
+
+@property (nonatomic, strong) NSArray<NSString *> *arr;
+@property (nonatomic, copy) void(^callBack)(NSString *word);
+
+- (void)setData:(NSArray<NSString *> *)words origen:(CGPoint)origin;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 105 - 0
Asteria/Fuction/Category/tipV/KWLenovoWordListView.m

@@ -0,0 +1,105 @@
+//
+//  KWLenovoWordListView.m
+//  westkissMob
+//
+//  Created by iOS on 2022/9/14.
+//
+
+#import "KWLenovoWordListView.h"
+
+@interface KWLenovoWordListView () <UITableViewDelegate,UITableViewDataSource>
+
+@property (nonatomic, strong) UITableView *tableV;
+
+@end
+
+@implementation KWLenovoWordListView
+
+- (void)setData:(NSArray<NSString *> *)words origen:(CGPoint)origin {
+    self.arr = words;
+    [self resetFrame:origin];
+}
+
+- (void)resetFrame:(CGPoint)origin {
+    CGRect rect = self.frame;
+    rect.origin = origin;
+    CGFloat h = (CGFloat)(20 + self.arr.count * 34);
+    h = h > 260 ? 260 : h;
+    rect.size.height = h;
+    [self mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo([NSNumber numberWithFloat: rect.origin.y]);
+        make.left.equalTo([NSNumber numberWithFloat: rect.origin.x]);
+        make.width.equalTo([NSNumber numberWithFloat:rect.size.width]);
+        make.height.equalTo([NSNumber numberWithFloat: rect.size.height]);
+    }];
+    [self.tableV setNeedsUpdateConstraints];
+    [self configLayer];
+    [self.tableV reloadData];
+}
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self configSubV];
+    }
+    return self;
+}
+
+-(void)configLayer {
+    [self setLayerShadow:[[UIColor colorWithHexString:@"#000000"] colorWithAlphaComponent:0.05] offset:CGSizeMake(0, 6) radius:10];
+    
+    self.layer.cornerRadius = 4;
+}
+
+-(void)configSubV {
+    self.backgroundColor = UIColor.whiteColor;
+    
+    [self configLayer];
+    
+    [self addSubview:self.tableV];
+    [self.tableV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(self).offset(10);
+        make.center.equalTo(self);
+    }];
+}
+
+-(UITableView *)tableV {
+    if (!_tableV) {
+        UITableView * tabV = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth-60, 200) style:UITableViewStylePlain];
+        tabV.backgroundColor = UIColor.whiteColor;
+        tabV.delegate = self;
+        tabV.dataSource = self;
+        tabV.separatorStyle = UITableViewCellSeparatorStyleNone;
+        tabV.rowHeight = 34;
+        [tabV registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
+        _tableV = tabV;
+    }
+    return  _tableV;
+}
+
+#pragma mark - UITableViewDelegate,UITableViewDataSource
+
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.callBack) {
+        self.callBack(self.arr[indexPath.row]);
+    }
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return _arr.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
+    cell.backgroundColor = UIColor.whiteColor;
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    cell.textLabel.font = [UIFont fontWithName:Rob_Bold size:12];
+    cell.textLabel.textColor = [UIColor colorWithHexString:@"#0b0b0b"];
+    
+    cell.textLabel.text = self.arr[indexPath.row];
+    
+    return cell;
+}
+
+@end

+ 18 - 0
Asteria/Fuction/Category/tipV/KWNoHisWordsCell.h

@@ -0,0 +1,18 @@
+//
+//  KWNoHisWordsCell.h
+//  westkissMob
+//
+//  Created by iOS on 2022/9/14.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface KWNoHisWordsCell : UICollectionViewCell
+
+@property (nonatomic, strong) UILabel *titleLb;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 44 - 0
Asteria/Fuction/Category/tipV/KWNoHisWordsCell.m

@@ -0,0 +1,44 @@
+//
+//  KWNoHisWordsCell.m
+//  westkissMob
+//
+//  Created by iOS on 2022/9/14.
+//
+
+#import "KWNoHisWordsCell.h"
+
+@implementation KWNoHisWordsCell
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self configSubV];
+    }
+    return self;
+}
+
+-(void)configSubV {
+    self.backgroundColor = [UIColor colorWithHexString:@"#F8F8F8"];
+//    self.layer.cornerRadius = 2;
+    [self addSubview:self.titleLb];
+    [self.titleLb mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(self).offset(5);
+        make.center.equalTo(self);
+    }];
+}
+
+
+
+- (UILabel *)titleLb {
+    if (!_titleLb) {
+        UILabel * lb = [[UILabel alloc] init];
+        lb.font = [UIFont fontWithName:Rob_Regular size:16];
+        lb.textAlignment = NSTextAlignmentCenter;
+        lb.text = @"No Search Record Yet.";
+        lb.textColor = [[UIColor colorWithHexString:@"#1F1D2B"] colorWithAlphaComponent:0.3];
+        _titleLb = lb;
+    }
+    return  _titleLb;
+}
+
+@end