Kaynağa Gözat

拼工列表

Bob 6 yıl önce
ebeveyn
işleme
beebacc30e
65 değiştirilmiş dosya ile 5105 ekleme ve 2588 silme
  1. 44 14
      HappyJob/HappyJob.xcodeproj/project.pbxproj
  2. BIN
      HappyJob/HappyJob.xcworkspace/xcuserdata/Bob.xcuserdatad/UserInterfaceState.xcuserstate
  3. 23 0
      HappyJob/HappyJob/Assets.xcassets/Join/join_agreement.imageset/Contents.json
  4. BIN
      HappyJob/HappyJob/Assets.xcassets/Join/join_agreement.imageset/规则.png
  5. BIN
      HappyJob/HappyJob/Assets.xcassets/Join/join_agreement.imageset/规则@2x.png
  6. BIN
      HappyJob/HappyJob/Assets.xcassets/Join/join_agreement.imageset/规则@3x.png
  7. 23 0
      HappyJob/HappyJob/Assets.xcassets/Join/join_blank.imageset/Contents.json
  8. BIN
      HappyJob/HappyJob/Assets.xcassets/Join/join_blank.imageset/空白页.png
  9. BIN
      HappyJob/HappyJob/Assets.xcassets/Join/join_blank.imageset/空白页@2x.png
  10. BIN
      HappyJob/HappyJob/Assets.xcassets/Join/join_blank.imageset/空白页@3x.png
  11. 18 0
      HappyJob/HappyJob/Components/CustomControl/UIView/Blank_空白页/HJBlankView.h
  12. 71 0
      HappyJob/HappyJob/Components/CustomControl/UIView/Blank_空白页/HJBlankView.m
  13. 3 0
      HappyJob/HappyJob/Components/CustomControl/UIView/Cell_岗位列表样式/HJFullTimeCellView.h
  14. 46 8
      HappyJob/HappyJob/Components/CustomControl/UIView/Cell_岗位列表样式/HJFullTimeCellView.m
  15. 3 2
      HappyJob/HappyJob/Components/CustomControl/UIView/Refresh_上拉下拉刷新/HJRefreshFooterView.m
  16. 3 1
      HappyJob/HappyJob/Components/FBKit/XHDate/NSDate+FBBetweenDays.h
  17. 14 2
      HappyJob/HappyJob/Components/FBKit/XHDate/NSDate+FBBetweenDays.m
  18. 14 4
      HappyJob/HappyJob/DataCenter/Model/Position/HJPositionModel.h
  19. 0 1
      HappyJob/HappyJob/JobList_工作列表信息/Benefit_福利岗位/HJBenefitViewController.m
  20. 59 10
      HappyJob/HappyJob/JobList_工作列表信息/HJPositionDataBox.m
  21. 10 1
      HappyJob/HappyJob/Join_拼工/HJJoinTableViewCell.h
  22. 238 62
      HappyJob/HappyJob/Join_拼工/HJJoinTableViewCell.m
  23. 64 39
      HappyJob/HappyJob/Join_拼工/HJJoinViewController.m
  24. 17 0
      HappyJob/HappyJob/Join_拼工/JoinAPIManager/HJGetGroupPositionAPIManager.h
  25. 17 0
      HappyJob/HappyJob/Join_拼工/JoinAPIManager/HJGetGroupPositionAPIManager.m
  26. 3 3
      HappyJob/HappyJob/Message_消息/消息空白页/HJMessageBlankView.h
  27. 58 0
      HappyJob/HappyJob/Join_拼工/拼工规则/HJJoinAgreementViewController.m
  28. 12 42
      HappyJob/HappyJob/Message_消息/HJMessageViewController.m
  29. 0 2
      HappyJob/HappyJob/Message_消息/MessageAPIManager/HJMessageDataBox.h
  30. 1 1
      HappyJob/HappyJob/Message_消息/MessageAPIManager/HJMessageDataBox.m
  31. 0 94
      HappyJob/HappyJob/Message_消息/消息空白页/HJMessageBlankView.m
  32. 7 1
      HappyJob/HappyJob/Pageable_分页列表/HJPageListView.h
  33. 36 9
      HappyJob/HappyJob/Pageable_分页列表/HJPageListView.m
  34. 1 1
      HappyJob/HappyJob/Pageable_分页列表/PageableAPIManager/HJPageableAPIManager.m
  35. 1 0
      HappyJob/Podfile
  36. 5 1
      HappyJob/Podfile.lock
  37. 9 0
      HappyJob/Pods/DZNEmptyDataSet/LICENSE
  38. 296 0
      HappyJob/Pods/DZNEmptyDataSet/README.md
  39. 280 0
      HappyJob/Pods/DZNEmptyDataSet/Source/UIScrollView+EmptyDataSet.h
  40. 1074 0
      HappyJob/Pods/DZNEmptyDataSet/Source/UIScrollView+EmptyDataSet.m
  41. 5 1
      HappyJob/Pods/Manifest.lock
  42. 2457 2270
      HappyJob/Pods/Pods.xcodeproj/project.pbxproj
  43. 60 0
      HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/DZNEmptyDataSet.xcscheme
  44. 2 2
      HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/Pods-HappyJob.xcscheme
  45. 1 1
      HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/SDCycleScrollView.xcscheme
  46. 1 1
      HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/SDWebImage.xcscheme
  47. 1 1
      HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/SGEasyButton.xcscheme
  48. 1 1
      HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/SVProgressHUD.xcscheme
  49. 1 1
      HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/TXScrollLabelView.xcscheme
  50. 1 1
      HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/WechatOpenSDK.xcscheme
  51. 1 1
      HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/XHLaunchAd.xcscheme
  52. 1 1
      HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/YTKNetwork.xcscheme
  53. 1 1
      HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/YYModel.xcscheme
  54. 5 0
      HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/xcschememanagement.plist
  55. 26 0
      HappyJob/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-Info.plist
  56. 5 0
      HappyJob/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-dummy.m
  57. 12 0
      HappyJob/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch
  58. 17 0
      HappyJob/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-umbrella.h
  59. 6 0
      HappyJob/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet.modulemap
  60. 9 0
      HappyJob/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet.xcconfig
  61. 13 0
      HappyJob/Pods/Target Support Files/Pods-HappyJob/Pods-HappyJob-acknowledgements.markdown
  62. 19 0
      HappyJob/Pods/Target Support Files/Pods-HappyJob/Pods-HappyJob-acknowledgements.plist
  63. 2 0
      HappyJob/Pods/Target Support Files/Pods-HappyJob/Pods-HappyJob-frameworks.sh
  64. 4 4
      HappyJob/Pods/Target Support Files/Pods-HappyJob/Pods-HappyJob.debug.xcconfig
  65. 4 4
      HappyJob/Pods/Target Support Files/Pods-HappyJob/Pods-HappyJob.release.xcconfig

+ 44 - 14
HappyJob/HappyJob.xcodeproj/project.pbxproj

@@ -55,7 +55,6 @@
 		C40FA70C227590BC00EB2371 /* UIColor+FBGetRGBComponents.m in Sources */ = {isa = PBXBuildFile; fileRef = C40FA70B227590BC00EB2371 /* UIColor+FBGetRGBComponents.m */; };
 		C40FA7102275A8E200EB2371 /* HJRefreshHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = C40FA70F2275A8E200EB2371 /* HJRefreshHeaderView.m */; };
 		C40FA7132275CC8700EB2371 /* NSDate+FBBetweenDays.m in Sources */ = {isa = PBXBuildFile; fileRef = C40FA7122275CC8700EB2371 /* NSDate+FBBetweenDays.m */; };
-		C40FA7172275DC6400EB2371 /* HJMessageBlankView.m in Sources */ = {isa = PBXBuildFile; fileRef = C40FA7162275DC6400EB2371 /* HJMessageBlankView.m */; };
 		C40FA71A2276A46B00EB2371 /* HJRefreshFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = C40FA7192276A46B00EB2371 /* HJRefreshFooterView.m */; };
 		C40FA71D2276E37600EB2371 /* UIImageView+FBRotation.m in Sources */ = {isa = PBXBuildFile; fileRef = C40FA71C2276E37600EB2371 /* UIImageView+FBRotation.m */; };
 		C40FA7202277045800EB2371 /* HJGetFullTimePositionAPIManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C40FA71F2277045800EB2371 /* HJGetFullTimePositionAPIManager.m */; };
@@ -97,6 +96,9 @@
 		C411AE13228E8B34008B77A5 /* HJResumeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C411AE12228E8B34008B77A5 /* HJResumeModel.m */; };
 		C411AE17228E928A008B77A5 /* HJGetResumeAPIManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C411AE16228E928A008B77A5 /* HJGetResumeAPIManager.m */; };
 		C411AE1A228EA8EE008B77A5 /* HJSaveResumeBaseInfoAPIManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C411AE19228EA8EE008B77A5 /* HJSaveResumeBaseInfoAPIManager.m */; };
+		C41222D3229388760060F1E1 /* HJGetGroupPositionAPIManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C41222D2229388760060F1E1 /* HJGetGroupPositionAPIManager.m */; };
+		C41222D7229397C30060F1E1 /* HJJoinAgreementViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C41222D6229397C30060F1E1 /* HJJoinAgreementViewController.m */; };
+		C41222DB2293A6F80060F1E1 /* HJBlankView.m in Sources */ = {isa = PBXBuildFile; fileRef = C41222DA2293A6F80060F1E1 /* HJBlankView.m */; };
 		C4129F0F224B197D00E762D5 /* HJCityPickerLocationView.m in Sources */ = {isa = PBXBuildFile; fileRef = C4129F0E224B197D00E762D5 /* HJCityPickerLocationView.m */; };
 		C4129F13224B396700E762D5 /* FBFlowLayoutView.m in Sources */ = {isa = PBXBuildFile; fileRef = C4129F12224B396700E762D5 /* FBFlowLayoutView.m */; };
 		C4129F16224B5ADA00E762D5 /* HJCityPickerHotCell.m in Sources */ = {isa = PBXBuildFile; fileRef = C4129F15224B5ADA00E762D5 /* HJCityPickerHotCell.m */; };
@@ -311,8 +313,6 @@
 		C40FA70F2275A8E200EB2371 /* HJRefreshHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HJRefreshHeaderView.m; sourceTree = "<group>"; };
 		C40FA7112275CC8700EB2371 /* NSDate+FBBetweenDays.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSDate+FBBetweenDays.h"; sourceTree = "<group>"; };
 		C40FA7122275CC8700EB2371 /* NSDate+FBBetweenDays.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSDate+FBBetweenDays.m"; sourceTree = "<group>"; };
-		C40FA7152275DC6400EB2371 /* HJMessageBlankView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HJMessageBlankView.h; sourceTree = "<group>"; };
-		C40FA7162275DC6400EB2371 /* HJMessageBlankView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HJMessageBlankView.m; sourceTree = "<group>"; };
 		C40FA7182276A46A00EB2371 /* HJRefreshFooterView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HJRefreshFooterView.h; sourceTree = "<group>"; };
 		C40FA7192276A46B00EB2371 /* HJRefreshFooterView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HJRefreshFooterView.m; sourceTree = "<group>"; };
 		C40FA71B2276E37600EB2371 /* UIImageView+FBRotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImageView+FBRotation.h"; sourceTree = "<group>"; };
@@ -395,6 +395,12 @@
 		C411AE16228E928A008B77A5 /* HJGetResumeAPIManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HJGetResumeAPIManager.m; sourceTree = "<group>"; };
 		C411AE18228EA8EE008B77A5 /* HJSaveResumeBaseInfoAPIManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HJSaveResumeBaseInfoAPIManager.h; sourceTree = "<group>"; };
 		C411AE19228EA8EE008B77A5 /* HJSaveResumeBaseInfoAPIManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HJSaveResumeBaseInfoAPIManager.m; sourceTree = "<group>"; };
+		C41222D1229388760060F1E1 /* HJGetGroupPositionAPIManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HJGetGroupPositionAPIManager.h; sourceTree = "<group>"; };
+		C41222D2229388760060F1E1 /* HJGetGroupPositionAPIManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HJGetGroupPositionAPIManager.m; sourceTree = "<group>"; };
+		C41222D5229397C30060F1E1 /* HJJoinAgreementViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HJJoinAgreementViewController.h; sourceTree = "<group>"; };
+		C41222D6229397C30060F1E1 /* HJJoinAgreementViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HJJoinAgreementViewController.m; sourceTree = "<group>"; };
+		C41222D92293A6F80060F1E1 /* HJBlankView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HJBlankView.h; sourceTree = "<group>"; };
+		C41222DA2293A6F80060F1E1 /* HJBlankView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HJBlankView.m; sourceTree = "<group>"; };
 		C4129F0D224B197D00E762D5 /* HJCityPickerLocationView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HJCityPickerLocationView.h; sourceTree = "<group>"; };
 		C4129F0E224B197D00E762D5 /* HJCityPickerLocationView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HJCityPickerLocationView.m; sourceTree = "<group>"; };
 		C4129F11224B396700E762D5 /* FBFlowLayoutView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBFlowLayoutView.h; sourceTree = "<group>"; };
@@ -844,15 +850,6 @@
 			path = "Refresh_上拉下拉刷新";
 			sourceTree = "<group>";
 		};
-		C40FA7142275DBFA00EB2371 /* 消息空白页 */ = {
-			isa = PBXGroup;
-			children = (
-				C40FA7152275DC6400EB2371 /* HJMessageBlankView.h */,
-				C40FA7162275DC6400EB2371 /* HJMessageBlankView.m */,
-			);
-			path = "消息空白页";
-			sourceTree = "<group>";
-		};
 		C40FF1D4223F828C008868BF = {
 			isa = PBXGroup;
 			children = (
@@ -924,7 +921,6 @@
 			children = (
 				C412BD8E2277DBA00098893C /* MessageAPIManager */,
 				C413DDF02284034700F9F17D /* 返费 */,
-				C40FA7142275DBFA00EB2371 /* 消息空白页 */,
 				C40FF216223F86F3008868BF /* HJMessageViewController.h */,
 				C40FF215223F86F3008868BF /* HJMessageViewController.m */,
 				C414D8962267070F00719CE0 /* HJMessageTableViewCell.h */,
@@ -955,6 +951,8 @@
 		C40FF21A223F86F4008868BF /* Join_拼工 */ = {
 			isa = PBXGroup;
 			children = (
+				C41222D4229397050060F1E1 /* 拼工规则 */,
+				C41222D0229387540060F1E1 /* JoinAPIManager */,
 				C417DE28225ED291003853B7 /* Share_生成分享图 */,
 				C4158F49225B3E4700A7B1E5 /* Apply_申请拼工 */,
 				C4158F3F225B263B00A7B1E5 /* All_所有拼工 */,
@@ -1156,6 +1154,33 @@
 			path = ResumeAPIManager;
 			sourceTree = "<group>";
 		};
+		C41222D0229387540060F1E1 /* JoinAPIManager */ = {
+			isa = PBXGroup;
+			children = (
+				C41222D1229388760060F1E1 /* HJGetGroupPositionAPIManager.h */,
+				C41222D2229388760060F1E1 /* HJGetGroupPositionAPIManager.m */,
+			);
+			path = JoinAPIManager;
+			sourceTree = "<group>";
+		};
+		C41222D4229397050060F1E1 /* 拼工规则 */ = {
+			isa = PBXGroup;
+			children = (
+				C41222D5229397C30060F1E1 /* HJJoinAgreementViewController.h */,
+				C41222D6229397C30060F1E1 /* HJJoinAgreementViewController.m */,
+			);
+			path = "拼工规则";
+			sourceTree = "<group>";
+		};
+		C41222D82293A6AB0060F1E1 /* Blank_空白页 */ = {
+			isa = PBXGroup;
+			children = (
+				C41222D92293A6F80060F1E1 /* HJBlankView.h */,
+				C41222DA2293A6F80060F1E1 /* HJBlankView.m */,
+			);
+			path = "Blank_空白页";
+			sourceTree = "<group>";
+		};
 		C4129F10224B38BB00E762D5 /* FBLayout */ = {
 			isa = PBXGroup;
 			children = (
@@ -1329,6 +1354,7 @@
 		C413FCBC22547BFA00BEE4F0 /* UIView */ = {
 			isa = PBXGroup;
 			children = (
+				C41222D82293A6AB0060F1E1 /* Blank_空白页 */,
 				C40FA70D2275A83B00EB2371 /* Refresh_上拉下拉刷新 */,
 				C4FB5CE22271B3A50004010F /* Cell_岗位列表样式 */,
 				C40E8F06226DA8FC00F3900A /* Loading_加载页面 */,
@@ -1950,6 +1976,7 @@
 				"${PODS_ROOT}/Target Support Files/Pods-HappyJob/Pods-HappyJob-frameworks.sh",
 				"${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework",
 				"${BUILT_PRODUCTS_DIR}/CocoaLumberjack/CocoaLumberjack.framework",
+				"${BUILT_PRODUCTS_DIR}/DZNEmptyDataSet/DZNEmptyDataSet.framework",
 				"${BUILT_PRODUCTS_DIR}/FCUUID/FCUUID.framework",
 				"${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework",
 				"${BUILT_PRODUCTS_DIR}/IQKeyboardManager/IQKeyboardManager.framework",
@@ -1972,6 +1999,7 @@
 			outputPaths = (
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CocoaLumberjack.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DZNEmptyDataSet.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FCUUID.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FLAnimatedImage.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardManager.framework",
@@ -2033,7 +2061,6 @@
 				C40FA70C227590BC00EB2371 /* UIColor+FBGetRGBComponents.m in Sources */,
 				C4158F42225B269500A7B1E5 /* HJJoinAllJoinPanelViewController.m in Sources */,
 				C412B2272269AC10002B0C44 /* HJAuthSuccessViewController.m in Sources */,
-				C40FA7172275DC6400EB2371 /* HJMessageBlankView.m in Sources */,
 				C410339A2292B59B00736298 /* HJSaveWechatNumberAPIManager.m in Sources */,
 				C4FB5CE52271B40D0004010F /* HJPartTimeCellView.m in Sources */,
 				C4158F52225B479D00A7B1E5 /* HJJoinDetailHeaderView.m in Sources */,
@@ -2088,6 +2115,7 @@
 				C40FF24F223F86F4008868BF /* HJSearchViewController.m in Sources */,
 				C40F6EEB225E12D30034BEF8 /* HJBenefitViewController.m in Sources */,
 				C40B5A152249E87B00BCF1D7 /* HJWorkplaceAnnotation.m in Sources */,
+				C41222D3229388760060F1E1 /* HJGetGroupPositionAPIManager.m in Sources */,
 				C49612E12265D80300898E55 /* HJExperienceViewController.m in Sources */,
 				C4129F13224B396700E762D5 /* FBFlowLayoutView.m in Sources */,
 				C410F07D2272D02B002A397C /* FBLabel+HJWelfareTagLabel.m in Sources */,
@@ -2184,6 +2212,7 @@
 				C40FF252223F86F4008868BF /* HJLoginViewController.m in Sources */,
 				C413FCBF22547D8D00BEE4F0 /* HJFullTimeCellView.m in Sources */,
 				C413DDFC228419DC00F9F17D /* HJMessageDetailDataBox.m in Sources */,
+				C41222D7229397C30060F1E1 /* HJJoinAgreementViewController.m in Sources */,
 				C49DE84122850AAE00A1B67A /* HJMyFavoriteAPIManager.m in Sources */,
 				C419B3A62255F9CA00572A58 /* HJPortraitView.m in Sources */,
 				C410F08A2272F020002A397C /* HJPositionDetailModel.m in Sources */,
@@ -2215,6 +2244,7 @@
 				C410F0812272DD75002A397C /* HJGetPositionDetailAPIManager.m in Sources */,
 				C43224E42289709700A8279E /* HJSaveAgentAPIManager.m in Sources */,
 				C40AEC582241DA9300A9EA23 /* HJBaseViewController.m in Sources */,
+				C41222DB2293A6F80060F1E1 /* HJBlankView.m in Sources */,
 				C414D8982267070F00719CE0 /* HJMessageTableViewCell.m in Sources */,
 				C40FA7132275CC8700EB2371 /* NSDate+FBBetweenDays.m in Sources */,
 				C4158F4C225B42FF00A7B1E5 /* HJJoinApplyViewController.m in Sources */,

BIN
HappyJob/HappyJob.xcworkspace/xcuserdata/Bob.xcuserdatad/UserInterfaceState.xcuserstate


+ 23 - 0
HappyJob/HappyJob/Assets.xcassets/Join/join_agreement.imageset/Contents.json

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

BIN
HappyJob/HappyJob/Assets.xcassets/Join/join_agreement.imageset/规则.png


BIN
HappyJob/HappyJob/Assets.xcassets/Join/join_agreement.imageset/规则@2x.png


BIN
HappyJob/HappyJob/Assets.xcassets/Join/join_agreement.imageset/规则@3x.png


+ 23 - 0
HappyJob/HappyJob/Assets.xcassets/Join/join_blank.imageset/Contents.json

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

BIN
HappyJob/HappyJob/Assets.xcassets/Join/join_blank.imageset/空白页.png


BIN
HappyJob/HappyJob/Assets.xcassets/Join/join_blank.imageset/空白页@2x.png


BIN
HappyJob/HappyJob/Assets.xcassets/Join/join_blank.imageset/空白页@3x.png


+ 18 - 0
HappyJob/HappyJob/Components/CustomControl/UIView/Blank_空白页/HJBlankView.h

@@ -0,0 +1,18 @@
+//
+//  HJBlankView.h
+//  HappyJob
+//
+//  Created by Bob on 2019/5/21.
+//  Copyright © 2019 Bob. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HJBlankView : UIView
+@property (nonatomic, strong) UIImageView *imageView;
+@property (nonatomic, strong) UILabel *label;
+@end
+
+NS_ASSUME_NONNULL_END

+ 71 - 0
HappyJob/HappyJob/Components/CustomControl/UIView/Blank_空白页/HJBlankView.m

@@ -0,0 +1,71 @@
+//
+//  HJBlankView.m
+//  HappyJob
+//
+//  Created by Bob on 2019/5/21.
+//  Copyright © 2019 Bob. All rights reserved.
+//
+
+#import "HJBlankView.h"
+
+@interface HJBlankView ()
+@property (nonatomic, strong) UIView *canvasView;
+@end
+
+@implementation HJBlankView
+
+- (instancetype)init {
+    if (self = [super init]) {
+        self.backgroundColor = [UIColor whiteColor];
+        
+        [self addSubview:self.canvasView];
+        [self.canvasView addSubview:self.imageView];
+        [self.canvasView addSubview:self.label];
+        [self makeConstraints];
+    }
+    return self;
+}
+
+- (void)makeConstraints {
+    [self.imageView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.centerX.equalTo(self.canvasView);
+    }];
+    [self.label mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.imageView.mas_bottom).with.offset(20);
+        make.centerX.equalTo(self.canvasView);
+    }];
+    [self.canvasView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.imageView);
+        make.left.right.bottom.equalTo(self.label);
+        make.center.equalTo(self);
+    }];
+}
+
+#pragma mark - getters and setters
+
+- (UIView *)canvasView {
+    if (_canvasView == nil) {
+        _canvasView = [[UIView alloc] init];
+    }
+    return _canvasView;
+}
+
+- (UIImageView *)imageView {
+    if (_imageView == nil) {
+        _imageView = [[UIImageView alloc] init];
+    }
+    return _imageView;
+}
+
+- (UILabel *)label {
+    if (_label == nil) {
+        _label = [[UILabel alloc] init];
+        _label.textColor = [UIColor colorWithRed:204/255.0 green:204/255.0 blue:204/255.0 alpha:1.0];
+        _label.font = [UIFont systemFontOfSize:16];
+        _label.textAlignment = NSTextAlignmentCenter;
+        _label.numberOfLines = 0;
+    }
+    return _label;
+}
+
+@end

+ 3 - 0
HappyJob/HappyJob/Components/CustomControl/UIView/Cell_岗位列表样式/HJFullTimeCellView.h

@@ -13,6 +13,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface HJFullTimeCellView : UIView
 @property (nonatomic, strong) UILabel *titleLabel;
+@property (nonatomic, strong) UILabel *titleTagLabel;
 @property (nonatomic, assign) BOOL hiddenTitleTag;
 @property (nonatomic, strong) UILabel *moneyLabel;
 @property (nonatomic, strong) UILabel *companyLabel;
@@ -20,6 +21,8 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic, strong) HJMaxMoneyLabel *maxMoneyLabel;
 @property (nonatomic, strong) UILabel *dateLabel;
 @property (nonatomic, copy) NSArray *welfareTagArray;
+
+- (instancetype)initWithEdgeInsets:(UIEdgeInsets)edgeInsets;
 @end
 
 NS_ASSUME_NONNULL_END

+ 46 - 8
HappyJob/HappyJob/Components/CustomControl/UIView/Cell_岗位列表样式/HJFullTimeCellView.m

@@ -8,12 +8,12 @@
 
 #import "HJFullTimeCellView.h"
 #import "UILabel+HJTitleTagLabel.h"
-#import "FBLabel+HJWelfareTagLabel.h"
+#import "NSString+FBBoundingSize.h"
 #import "FBFlowLayoutView.h"
 
 @interface HJFullTimeCellView () <FBFlowLayoutDelegate, FBFlowLayoutDataSource>
-@property (nonatomic, strong) UILabel *titleTagLabel;
 @property (nonatomic, strong) FBFlowLayoutView *welfareView;
+@property (nonatomic, assign) UIEdgeInsets edgeInsets;
 @end
 
 @implementation HJFullTimeCellView
@@ -21,7 +21,13 @@
 #pragma mark - life cycle
 
 - (instancetype)init {
+    return [self initWithEdgeInsets:UIEdgeInsetsZero];
+}
+
+- (instancetype)initWithEdgeInsets:(UIEdgeInsets)edgeInsets {
     if (self = [super init]) {
+        _edgeInsets = edgeInsets;
+        
         [self addSubview:self.titleLabel];
         [self addSubview:self.titleTagLabel];
         [self addSubview:self.moneyLabel];
@@ -30,7 +36,6 @@
         [self addSubview:self.welfareView];
         [self addSubview:self.maxMoneyLabel];
         [self addSubview:self.dateLabel];
-        
         [self makeConstraints];
         
         self.hiddenTitleTag = NO;
@@ -40,7 +45,8 @@
 
 - (void)makeConstraints {
     [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.left.equalTo(self);
+        make.top.equalTo(self).with.offset(self.edgeInsets.top);
+        make.left.equalTo(self).with.offset(self.edgeInsets.left);
     }];
     [self.titleTagLabel mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.equalTo(self.titleLabel.mas_right).with.offset(8);
@@ -81,8 +87,22 @@
     }];
 }
 
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    
+}
+
+//- (CGSize)intrinsicContentSize {
+//    return CGSizeMake(300, 300);
+//}
+
 #pragma mark - CustomDelegate
 
+- (CGFloat)estimateWidthInFlowLayoutView:(FBFlowLayoutView *)flowLayoutView {
+    //NSLog(@"fffffff = %@", NSStringFromCGRect(self.superview.frame));
+    return (SCREEN_WIDTH - self.edgeInsets.left - self.edgeInsets.right);
+}
+
 - (CGFloat)subviewHorizontalSpacingInFlowLayoutView:(FBFlowLayoutView *)flowLayoutView {
     return 6;
 }
@@ -96,11 +116,29 @@
 }
 
 - (UIView *)flowLayoutView:(FBFlowLayoutView *)flowLayoutView subviewAtIndex:(NSUInteger)index {
-    NSString *text = self.welfareTagArray[index];
-    FBLabel *label = [FBLabel hj_welfareTag];
-    label.text = text;
+    NSString *title = self.welfareTagArray[index];
+    
+    UIColor *color = [UIColor colorWithRed:191/255.0 green:128/255.0 blue:48/255.0 alpha:1.0];
+    UIFont *font = [UIFont systemFontOfSize:9];
+    UIButton *tagButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    [tagButton setTitle:title forState:UIControlStateNormal];
+    [tagButton setTitleColor:color forState:UIControlStateNormal];
+    tagButton.titleLabel.font = font;
+    tagButton.titleLabel.numberOfLines = 0;
+    tagButton.layer.cornerRadius = 3;
+    tagButton.layer.masksToBounds = YES;
+    tagButton.layer.borderColor = color.CGColor;
+    tagButton.layer.borderWidth = 1;
+    tagButton.enabled = NO;
+    
+    // 去掉边界留白后,在计算文本的尺寸
+    UIEdgeInsets padding = UIEdgeInsetsMake(2, 5, 2, 5);
+    tagButton.titleEdgeInsets = padding;
+    CGSize contentMaxSize = CGSizeMake(flowLayoutView.contentWidth - padding.left - padding.right, MAXFLOAT - padding.top - padding.bottom);
+    CGSize size = [title fb_boundingSizeWithMaxSize:contentMaxSize font:font];
+    tagButton.frame = CGRectMake(0, 0, floorf(size.width + padding.left + padding.right), floorf(size.height + padding.top + padding.bottom));
     
-    return label;
+    return tagButton;
 }
 
 #pragma mark - private methods

+ 3 - 2
HappyJob/HappyJob/Components/CustomControl/UIView/Refresh_上拉下拉刷新/HJRefreshFooterView.m

@@ -15,7 +15,7 @@
     
     switch (state) {
         case MJRefreshStateIdle:
-            self.stateLabel.text = @"点击或上拉加載更多";
+            self.stateLabel.text = nil;
             break;
         case MJRefreshStatePulling:
             self.stateLabel.text = @"松开立即加載更多";
@@ -24,7 +24,8 @@
             self.stateLabel.text = @"数据加载中...";
             break;
         case MJRefreshStateNoMoreData:
-            self.stateLabel.text = @"没有更多信息了";
+            // 第一次加载的时候没有数据,不显示更多文体提示
+            self.stateLabel.text = (self.scrollView.mj_totalDataCount > 0) ? @"没有更多信息了" : nil;
         default:
             break;
     }

+ 3 - 1
HappyJob/HappyJob/Components/FBKit/XHDate/NSDate+FBBetweenDays.h

@@ -13,7 +13,9 @@ NS_ASSUME_NONNULL_BEGIN
 @interface NSDate (FBBetweenDays)
 
 + (NSInteger)fb_betweenDaysWithStartDateString:(NSString *)startDateStr endDateString:(NSString *)endDateStr;
-
++ (NSDateComponents *)fb_dateComponentsFromDate:(NSDate *)startDate toDate:(NSDate *)endDate;
+/** 字符串型的时间戳转成NSDate */
++ (instancetype)fb_dateWithTimeIntervalString:(NSString *)timeIntervalString;
 @end
 
 NS_ASSUME_NONNULL_END

+ 14 - 2
HappyJob/HappyJob/Components/FBKit/XHDate/NSDate+FBBetweenDays.m

@@ -18,6 +18,12 @@
     NSDate *startDate = [dateFormatter dateFromString:startDateStr.xh_format_yyyy_MM_dd];
     NSDate *endDate = [dateFormatter dateFromString:endDateStr.xh_format_yyyy_MM_dd];
     
+    NSDateComponents *delta = [self fb_dateComponentsFromDate:startDate toDate:endDate];
+    
+    return delta.day;
+}
+
++ (NSDateComponents *)fb_dateComponentsFromDate:(NSDate *)startDate toDate:(NSDate *)endDate {
     //利用NSCalendar比较日期的差异
     NSCalendar *calendar = [NSCalendar currentCalendar];
     /**
@@ -29,11 +35,17 @@
      *    NSCalendarUnitMinute : 分
      *    NSCalendarUnitSecond : 秒
      */
-    NSCalendarUnit unit = NSCalendarUnitDay;//只比较天数差异
+    NSCalendarUnit unit = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekOfYear |  NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal;
     //比较的结果是NSDateComponents类对象
     NSDateComponents *delta = [calendar components:unit fromDate:startDate toDate:endDate options:0];
     
-    return delta.day;
+    return delta;
+}
+
++ (instancetype)fb_dateWithTimeIntervalString:(NSString *)timeIntervalString {
+    // 因为服务器返回的时间戳通常是13位的,而iOS一般使用的是10位的,所以要做一下转换。
+    NSTimeInterval timeInterval = (timeIntervalString.length > 10) ? [[timeIntervalString substringToIndex:10] doubleValue] : [timeIntervalString doubleValue];
+    return [NSDate dateWithTimeIntervalSince1970:timeInterval];
 }
 
 @end

+ 14 - 4
HappyJob/HappyJob/DataCenter/Model/Position/HJPositionModel.h

@@ -20,6 +20,8 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic, assign) NSUInteger positionID;
 /**公司*/
 @property (nonatomic, strong) HJCompanyModel *hpCompany;
+/**岗位的工作地址列表数组*/
+@property (nonatomic, strong) NSArray<HJPositionAddressModel *> *hpPositionAddressList;
 /**岗位类型*/
 @property (nonatomic, assign) NSUInteger positionCategory;
 /**岗位类型*/
@@ -29,9 +31,9 @@ NS_ASSUME_NONNULL_BEGIN
 /**更新时间*/
 @property (nonatomic, copy) NSString *updateDate;
 /**入职奖励*/
-@property (nonatomic, assign) NSUInteger reward;
+@property (nonatomic, copy) NSString *reward;
 /**平台返现*/
-@property (nonatomic, assign) NSUInteger platformAllowance;
+@property (nonatomic, copy) NSString *platformAllowance;
 /**班车*/
 @property (nonatomic, copy) NSString *regularBus;
 /**工作餐*/
@@ -49,8 +51,6 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic, copy) NSString *publishTime;
 /**结束时间*/
 @property (nonatomic, copy) NSString *endTime;
-/**兼职岗位的工作地址列表数组*/
-@property (nonatomic, strong) NSArray<HJPositionAddressModel *> *hpPositionAddressList;
 /**兼职的工作日*/
 @property (nonatomic, copy) NSString *workDay;
 /**结算方式*/
@@ -65,6 +65,16 @@ NS_ASSUME_NONNULL_BEGIN
 
 /**福利集合*/
 - (NSArray *)getWelfareArray;
+
+/************************ 拼团岗位字段 ************************/
+
+/** 拼团人数 */
+@property (nonatomic, copy) NSString *startGroupNumber;
+/** 拼团结束时间 */
+@property (nonatomic, copy) NSString *groupEndTime;
+/** 服务器当前时间 */
+@property (nonatomic, copy) NSString *currentTime;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 0 - 1
HappyJob/HappyJob/JobList_工作列表信息/Benefit_福利岗位/HJBenefitViewController.m

@@ -7,7 +7,6 @@
 //
 
 #import "HJBenefitViewController.h"
-#import "HJBenefitDetailViewController.h"
 #import "HJPositionDataBox.h"
 #import "HJGetBenefitPositionAPIManager.h"
 #import "FBDistributeLayoutView.h"

+ 59 - 10
HappyJob/HappyJob/JobList_工作列表信息/HJPositionDataBox.m

@@ -13,12 +13,15 @@
 #import "HJGetBenefitPositionAPIManager.h"
 #import "HJGetFatSalaryPositionAPIManager.h"
 #import "HJGetRewardPositionAPIManager.h"
+#import "HJGetGroupPositionAPIManager.h"
 #import "HJSearchAPIManager.h"
 #import "HJMyFavoriteAPIManager.h"
 #import "HJMyApplyAPIManager.h"
 #import "HJPartTimeTableViewCell.h"
 #import "HJFullTimeTableViewCell.h"
+#import "HJJoinTableViewCell.h"
 #import "XHDate.h"
+#import "NSDate+FBBetweenDays.h"
 #import "HJPositionDetailView.h"
 #import "HJFullTimeDetailViewController.h"
 #import "HJBenefitDetailViewController.h"
@@ -27,6 +30,7 @@
 static NSString * const HJDefaultCellIdentifier = @"HJDefaultCell";
 static NSString * const HJFullTimeTableViewCellIdentifier = @"HJFullTimeTableViewCell";
 static NSString * const HJPartTimeTableViewCellIdentifier = @"HJPartTimeTableViewCell";
+static NSString * const HJJoinTableViewCellIdentifier = @"HJJoinTableViewCell";
 
 @interface HJPositionDataBox () <HJPositionDetailViewDelegate>
 @property (nonatomic, strong) NSMutableArray *dataSource;
@@ -62,6 +66,10 @@ static NSString * const HJPartTimeTableViewCellIdentifier = @"HJPartTimeTableVie
         if ([manager isKindOfClass:[HJGetBenefitPositionAPIManager class]]) {
             [self manager:(HJGetBenefitPositionAPIManager *)manager configDataSourceWithArray:[data valueForKeyPath:@"data.welfarePosition"]];
         }
+        // 配置拼图岗位数据
+        if ([manager isKindOfClass:[HJGetGroupPositionAPIManager class]]) {
+            [self manager:(HJGetGroupPositionAPIManager *)manager configDataSourceWithArray:[data valueForKeyPath:@"data.groupPosition"]];
+        }
         // 配置搜索岗位数据
         if ([manager isKindOfClass:[HJSearchAPIManager class]]) {
             [self manager:(HJSearchAPIManager *)manager configDataSourceWithArray:[data valueForKeyPath:@"data.searchPosition"]];
@@ -149,19 +157,18 @@ static NSString * const HJPartTimeTableViewCellIdentifier = @"HJPartTimeTableVie
         cell.hiddenTitleTag = (type != HJPositionTypeFatSalary) ? YES : NO;
         cell.moneyLabel.text = [NSString stringWithFormat:@"%@ 元", model.totalSalary];
         cell.companyLabel.text = model.hpCompany.companyName;
-        cell.addressLabel.text = model.hpCompany.adname;
+        cell.addressLabel.text = ((HJPositionAddressModel *)[model.hpPositionAddressList firstObject]).address;
         cell.dateLabel.text = model.updateDate.xh_format_yyyy_MM_dd;
-        // 当入职最高奖励的两个金额其中一个有值就显示控件,否则就不显示
-        NSInteger money1 = model.reward;
-        NSInteger money2 = model.platformAllowance;
-        if (money1 > 0) {
-            cell.maxMoneyLabel.text = [NSString stringWithFormat:@"%@元", @(money1)];
+        NSString *money1 = model.reward;
+        NSString *money2 = model.platformAllowance;
+        if (money1.length > 0) {
+            cell.maxMoneyLabel.text = money1;
         }
-        if (money2 > 0) {
-            cell.maxMoneyLabel.text = [NSString stringWithFormat:@"%@元", @(money2)];
+        if (money2.length > 0) {
+            cell.maxMoneyLabel.text = money2;
         }
-        if (money1 > 0 && money2 > 0) {
-            cell.maxMoneyLabel.text = [NSString stringWithFormat:@"%@ + %@", @(money1), @(money2)];
+        if (money1.length > 0 && money2.length > 0) {
+            cell.maxMoneyLabel.text = [NSString stringWithFormat:@"%@ + %@", money1, money2];
         }
         // 福利控件
         cell.welfareTagArray = [model getWelfareArray];
@@ -196,6 +203,48 @@ static NSString * const HJPartTimeTableViewCellIdentifier = @"HJPartTimeTableVie
         }
         
         return cell;
+    } else if (type == HJPositionTypeJoinJob) {
+        HJJoinTableViewCell *cell = (HJJoinTableViewCell *)[tableView dequeueReusableCellWithIdentifier:HJJoinTableViewCellIdentifier];
+        if (cell == nil) {
+            cell = [[HJJoinTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:HJJoinTableViewCellIdentifier];
+        }
+        
+        cell.titleLabel.text = model.positionName;
+        cell.moneyLabel.text = [NSString stringWithFormat:@"%@ 元", model.totalSalary];
+        cell.companyLabel.text = model.hpCompany.companyName;
+        cell.addressLabel.text = ((HJPositionAddressModel *)[model.hpPositionAddressList firstObject]).address;
+        cell.dateLabel.text = model.updateDate.xh_format_yyyy_MM_dd;
+        // 当入职最高奖励的两个金额其中一个有值就显示控件,否则就不显示
+        NSString *money1 = model.reward;
+        NSString *money2 = model.platformAllowance;
+        if (money1.length > 0) {
+            cell.maxMoneyLabel.text = money1;
+        }
+        if (money2.length > 0) {
+            cell.maxMoneyLabel.text = money2;
+        }
+        if (money1.length > 0 && money2.length > 0) {
+            cell.maxMoneyLabel.text = [NSString stringWithFormat:@"%@ + %@", money1, money2];
+        }
+        // 福利控件
+        cell.welfareTagArray = [model getWelfareArray];
+        // 拼团人数
+        NSMutableAttributedString *peopleString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"已有 %@ 位伙伴加入了该拼工", model.startGroupNumber]];
+        [peopleString addAttributes:@{NSForegroundColorAttributeName: [UIColor colorWithRed:255/255.0 green:143/255.0 blue:1/255.0 alpha:1.0]}
+                        range:NSMakeRange(3, model.startGroupNumber.length)];
+        cell.peopleCountLabel.attributedText = peopleString;
+        // 拼团倒计时
+        NSDate *fromeDate = [NSDate fb_dateWithTimeIntervalString:model.currentTime];
+        NSDate *toDate = [NSDate fb_dateWithTimeIntervalString:model.groupEndTime];
+        NSDateComponents *dateComponents = [NSDate fb_dateComponentsFromDate:fromeDate toDate:toDate];
+        NSMutableAttributedString *clockString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"距离结束还有:%02ld天%02ld小时%02ld分%02ld秒", (long)dateComponents.day, (long)dateComponents.hour, (long)dateComponents.minute, (long)dateComponents.second]];
+        [clockString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:255/255.0 green:143/255.0 blue:1/255.0 alpha:1.0] range:NSMakeRange(7, 2)];
+        [clockString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:255/255.0 green:143/255.0 blue:1/255.0 alpha:1.0] range:NSMakeRange(10, 2)];
+        [clockString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:255/255.0 green:143/255.0 blue:1/255.0 alpha:1.0] range:NSMakeRange(14, 2)];
+        [clockString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:255/255.0 green:143/255.0 blue:1/255.0 alpha:1.0] range:NSMakeRange(17, 2)];
+        cell.clockLabel.attributedText = clockString;
+        
+        return cell;
     } else {
         UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:HJDefaultCellIdentifier];
         if (cell == nil) {

+ 10 - 1
HappyJob/HappyJob/Join_拼工/HJJoinTableViewCell.h

@@ -7,11 +7,20 @@
 //
 
 #import <UIKit/UIKit.h>
+#import "HJMaxMoneyLabel.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
 @interface HJJoinTableViewCell : UITableViewCell
-
+@property (nonatomic, strong) UILabel *titleLabel;
+@property (nonatomic, strong) UILabel *moneyLabel;
+@property (nonatomic, strong) UILabel *companyLabel;
+@property (nonatomic, strong) UILabel *addressLabel;
+@property (nonatomic, strong) HJMaxMoneyLabel *maxMoneyLabel;
+@property (nonatomic, strong) UILabel *dateLabel;
+@property (nonatomic, copy) NSArray *welfareTagArray;
+@property (nonatomic, strong) UILabel *peopleCountLabel;
+@property (nonatomic, strong) UILabel *clockLabel;
 @end
 
 NS_ASSUME_NONNULL_END

+ 238 - 62
HappyJob/HappyJob/Join_拼工/HJJoinTableViewCell.m

@@ -7,29 +7,38 @@
 //
 
 #import "HJJoinTableViewCell.h"
-#import "HJFullTimeCellView.h"
-#import "HJClockLabel.h"
+#import "UILabel+HJTitleTagLabel.h"
+#import "FBFlowLayoutView.h"
+#import "NSString+FBBoundingSize.h"
 
-@interface HJJoinTableViewCell ()
+@interface HJJoinTableViewCell () <FBFlowLayoutDelegate, FBFlowLayoutDataSource>
 @property (nonatomic, strong) UIView *bgView;
-@property (nonatomic, strong) HJFullTimeCellView *fullTimeCell;
-@property (nonatomic, strong) UIView *footerView;
-@property (nonatomic, strong) UILabel *peopleCountLabel;
-@property (nonatomic, strong) HJClockLabel *clockLabel;
+@property (nonatomic, assign) UIEdgeInsets edgeInsets;
+@property (nonatomic, strong) UILabel *titleTagLabel;
+@property (nonatomic, strong) FBFlowLayoutView *welfareView;
+@property (nonatomic, strong) UIView *lineH;
+@property (nonatomic, strong) UIView *footer;
 @end
 
 @implementation HJJoinTableViewCell
 
 - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
     if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
-        self.contentView.backgroundColor = [UIColor colorWithRed:245/255.0 green:245/255.0 blue:245/255.0 alpha:1.0];
+        _edgeInsets = UIEdgeInsetsMake(20, 15, 0, 15);
         
         [self.contentView addSubview:self.bgView];
-        [self.bgView addSubview:self.fullTimeCell];
-        [self.bgView addSubview:self.footerView];
-        [self.footerView addSubview:self.peopleCountLabel];
-        [self.footerView addSubview:self.clockLabel];
-        
+        [self.contentView addSubview:self.titleLabel];
+        [self.contentView addSubview:self.titleTagLabel];
+        [self.contentView addSubview:self.moneyLabel];
+        [self.contentView addSubview:self.companyLabel];
+        [self.contentView addSubview:self.addressLabel];
+        [self.contentView addSubview:self.welfareView];
+        [self.contentView addSubview:self.maxMoneyLabel];
+        [self.contentView addSubview:self.dateLabel];
+        [self.contentView addSubview:self.lineH];
+        [self.contentView addSubview:self.peopleCountLabel];
+        [self.contentView addSubview:self.clockLabel];
+        [self.contentView addSubview:self.footer];
         [self makeConstraints];
     }
     return self;
@@ -37,80 +46,247 @@
 
 - (void)makeConstraints {
     [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.left.right.equalTo(self.contentView);
-        make.bottom.equalTo(self.contentView).with.offset(-9);
+        make.edges.equalTo(self.contentView).with.insets(self.edgeInsets);
+    }];
+    [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(self.bgView);
+    }];
+    [self.titleTagLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.titleLabel.mas_right).with.offset(8);
+        make.centerY.equalTo(self.titleLabel);
+        make.size.mas_equalTo(CGSizeMake(33, 16));
+    }];
+    [self.moneyLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self.bgView);
+        make.top.height.equalTo(self.titleLabel);
+        make.left.greaterThanOrEqualTo(self.titleTagLabel.mas_right);
+        make.width.mas_greaterThanOrEqualTo(120);
+    }];
+    [self.companyLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.titleLabel.mas_bottom).with.offset(6);
+        make.left.equalTo(self.titleLabel);
+        make.right.equalTo(self.addressLabel.mas_left).with.offset(-8);
     }];
-    [self.fullTimeCell mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.bgView).with.offset(20);
-        make.left.equalTo(self.bgView).with.offset(15);
-        make.right.equalTo(self.bgView).with.offset(-15);
-        make.bottom.equalTo(self.footerView.mas_top).with.offset(0);
+    [self.addressLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.companyLabel);
+        make.right.equalTo(self.moneyLabel);
     }];
-    [self.footerView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.equalTo(self.fullTimeCell);
-        make.right.equalTo(self.fullTimeCell);
-        make.bottom.equalTo(self.bgView);
-        make.height.mas_equalTo(28);
+    [self.welfareView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.equalTo(self.bgView);
+        make.top.equalTo(self.companyLabel.mas_bottom).with.offset(6);
+    }];
+    [self.maxMoneyLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.welfareView.mas_bottom).with.offset(6);
+        make.left.equalTo(self.titleLabel);
+    }];
+    [self.dateLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.welfareView.mas_bottom).with.offset(6);
+        make.left.greaterThanOrEqualTo(self.maxMoneyLabel.mas_right).with.offset(8);
+        make.right.equalTo(self.moneyLabel);
+        make.width.mas_greaterThanOrEqualTo(60);
+    }];
+    [self.lineH mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.dateLabel.mas_bottom).with.offset(12);
+        make.left.right.equalTo(self.bgView);
+        make.height.mas_equalTo(0.6);
     }];
     [self.peopleCountLabel mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.bottom.equalTo(self.footerView);
-        make.top.equalTo(self.footerView).with.offset(1);
-        make.width.mas_equalTo(130);
+        make.left.equalTo(self.bgView);
+        make.top.equalTo(self.lineH.mas_bottom).with.offset(8);
+        make.right.equalTo(self.clockLabel.mas_left).with.offset(-5);
     }];
     [self.clockLabel mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.right.bottom.equalTo(self.footerView);
-        make.top.equalTo(self.footerView).with.offset(1);
-        make.left.equalTo(self.peopleCountLabel.mas_right);
+        make.right.equalTo(self.bgView);
+        make.top.equalTo(self.peopleCountLabel);
+        make.width.mas_equalTo(175);
+    }];
+    [self.footer mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.peopleCountLabel.mas_bottom).with.offset(8);
+        make.left.right.equalTo(self.contentView);
+        make.height.mas_equalTo(9);
     }];
+    [self.bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(self.footer);
+    }];
+}
+
+#pragma mark - CustomDelegate
+
+- (CGFloat)estimateWidthInFlowLayoutView:(FBFlowLayoutView *)flowLayoutView {
+    return (SCREEN_WIDTH - self.edgeInsets.left - self.edgeInsets.right);
+}
+
+- (CGFloat)subviewHorizontalSpacingInFlowLayoutView:(FBFlowLayoutView *)flowLayoutView {
+    return 6;
+}
+
+- (CGFloat)subviewVerticalSpacingInFlowLayoutView:(FBFlowLayoutView *)flowLayoutView {
+    return 6;
+}
+
+- (NSUInteger)numberInFlowLayoutView:(FBFlowLayoutView *)flowLayoutView {
+    return self.welfareTagArray.count;
+}
+
+- (UIView *)flowLayoutView:(FBFlowLayoutView *)flowLayoutView subviewAtIndex:(NSUInteger)index {
+    NSString *title = self.welfareTagArray[index];
+    
+    UIColor *color = [UIColor colorWithRed:191/255.0 green:128/255.0 blue:48/255.0 alpha:1.0];
+    UIFont *font = [UIFont systemFontOfSize:9];
+    UIButton *tagButton = [UIButton buttonWithType:UIButtonTypeCustom];
+    [tagButton setTitle:title forState:UIControlStateNormal];
+    [tagButton setTitleColor:color forState:UIControlStateNormal];
+    tagButton.titleLabel.font = font;
+    tagButton.titleLabel.numberOfLines = 0;
+    tagButton.layer.cornerRadius = 3;
+    tagButton.layer.masksToBounds = YES;
+    tagButton.layer.borderColor = color.CGColor;
+    tagButton.layer.borderWidth = 1;
+    tagButton.enabled = NO;
+    
+    // 去掉边界留白后,在计算文本的尺寸
+    UIEdgeInsets padding = UIEdgeInsetsMake(2, 5, 2, 5);
+    tagButton.titleEdgeInsets = padding;
+    CGSize contentMaxSize = CGSizeMake(flowLayoutView.contentWidth - padding.left - padding.right, MAXFLOAT - padding.top - padding.bottom);
+    CGSize size = [title fb_boundingSizeWithMaxSize:contentMaxSize font:font];
+    tagButton.frame = CGRectMake(0, 0, floorf(size.width + padding.left + padding.right), floorf(size.height + padding.top + padding.bottom));
+    
+    return tagButton;
 }
 
+#pragma mark - private methods
+
 #pragma mark - getters and setters
 
+- (UIView *)bgView {
+    if (_bgView == nil) {
+        _bgView = [[UIView alloc] init];
+    }
+    return _bgView;
+}
+
+- (FBFlowLayoutView *)welfareView {
+    if (_welfareView == nil) {
+        _welfareView = [[FBFlowLayoutView alloc] init];
+        _welfareView.delegate = self;
+        _welfareView.dataSource = self;
+        _welfareView.numberOfLines = 0;
+    }
+    return _welfareView;
+}
+
+- (UILabel *)titleLabel {
+    if (_titleLabel == nil) {
+        _titleLabel = [[UILabel alloc] init];
+        //_titleLabel.text = @"夏普电子 操作工";
+        //_titleLabel.backgroundColor = [UIColor greenColor];
+        _titleLabel.textColor = [UIColor colorWithRed:34/255.0 green:34/255.0 blue:34/255.0 alpha:1.0];
+        _titleLabel.font = [UIFont systemFontOfSize:18];
+        //_titleLabel.numberOfLines = 0;
+        _titleLabel.textAlignment = NSTextAlignmentLeft;
+    }
+    return _titleLabel;
+}
+
+- (UILabel *)titleTagLabel {
+    if (_titleTagLabel == nil) {
+        _titleTagLabel = [UILabel hj_titleTagWithTitle:@"拼工"];
+    }
+    return _titleTagLabel;
+}
+
+- (UILabel *)moneyLabel {
+    if (_moneyLabel == nil) {
+        _moneyLabel = [[UILabel alloc] init];
+        //_moneyLabel.text = @"5001-8000 元";
+        //_moneyLabel.backgroundColor = [UIColor yellowColor];
+        _moneyLabel.textColor = [UIColor colorWithRed:255/255.0 green:64/255.0 blue:14/255.0 alpha:1.0];
+        _moneyLabel.font = [UIFont systemFontOfSize:18];
+        //_moneyLabel.numberOfLines = 0;
+        _moneyLabel.textAlignment = NSTextAlignmentRight;
+    }
+    return _moneyLabel;
+}
+
+- (UILabel *)companyLabel {
+    if (_companyLabel == nil) {
+        _companyLabel = [[UILabel alloc] init];
+        //_companyLabel.text = @"索尼数字产品(无锡)有限公司";
+        //_companyLabel.backgroundColor = [UIColor redColor];
+        _companyLabel.textColor = [UIColor colorWithRed:136/255.0 green:136/255.0 blue:136/255.0 alpha:1.0];
+        _companyLabel.font = [UIFont systemFontOfSize:10];
+        //_companyLabel.numberOfLines = 0;
+        _companyLabel.textAlignment = NSTextAlignmentLeft;
+    }
+    return _companyLabel;
+}
+
+- (UILabel *)addressLabel {
+    if (_addressLabel == nil) {
+        _addressLabel = [[UILabel alloc] init];
+        //_addressLabel.text = @"江苏-无锡-新区";
+        //_addressLabel.backgroundColor = [UIColor blueColor];
+        _addressLabel.textColor = [UIColor colorWithRed:136/255.0 green:136/255.0 blue:136/255.0 alpha:1.0];
+        _addressLabel.font = [UIFont systemFontOfSize:10];
+        //_addressLabel.numberOfLines = 0;
+        _addressLabel.textAlignment = NSTextAlignmentRight;
+    }
+    return _addressLabel;
+}
+
+- (UILabel *)dateLabel {
+    if (_dateLabel == nil) {
+        _dateLabel = [[UILabel alloc] init];
+        //_dateLabel.text = @"2019-03-04";
+        //_dateLabel.backgroundColor = [UIColor greenColor];
+        _dateLabel.textColor = [UIColor colorWithRed:136/255.0 green:136/255.0 blue:136/255.0 alpha:1.0];
+        _dateLabel.font = [UIFont systemFontOfSize:10];
+        //_dateLabel.numberOfLines = 0;
+        _dateLabel.textAlignment = NSTextAlignmentRight;
+    }
+    return _dateLabel;
+}
+
+- (HJMaxMoneyLabel *)maxMoneyLabel {
+    if (_maxMoneyLabel == nil) {
+        _maxMoneyLabel = [[HJMaxMoneyLabel alloc] init];
+        _maxMoneyLabel.hidden = YES;
+    }
+    return _maxMoneyLabel;
+}
+
+- (UIView *)lineH {
+    if (_lineH == nil) {
+        _lineH = [[UIView alloc] init];
+        _lineH.backgroundColor = [UIColor colorWithRed:221/255.0 green:221/255.0 blue:221/255.0 alpha:1.0];
+    }
+    return _lineH;
+}
+
 - (UILabel *)peopleCountLabel {
     if (_peopleCountLabel == nil) {
         _peopleCountLabel = [[UILabel alloc] init];
         _peopleCountLabel.font = [UIFont systemFontOfSize:10];
-        _peopleCountLabel.backgroundColor = [UIColor whiteColor];
-        
-        NSDictionary *attributes = @{NSForegroundColorAttributeName: [UIColor colorWithRed:34/255.0 green:34/255.0 blue:34/255.0 alpha:1.0]};
-        NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"已有 1 位伙伴加入了该拼工"
-                                                                                   attributes:attributes];
-        [string addAttributes:@{NSForegroundColorAttributeName: [UIColor colorWithRed:255/255.0 green:143/255.0 blue:1/255.0 alpha:1.0]}
-                        range:NSMakeRange(3, 1)];
-        _peopleCountLabel.attributedText = string;
+        _peopleCountLabel.textColor = [UIColor colorWithRed:34/255.0 green:34/255.0 blue:34/255.0 alpha:1.0];
     }
     return _peopleCountLabel;
 }
 
-- (HJClockLabel *)clockLabel {
+- (UILabel *)clockLabel {
     if (_clockLabel == nil) {
-        _clockLabel = [[HJClockLabel alloc] init];
-        _clockLabel.backgroundColor = [UIColor whiteColor];
+        _clockLabel = [[UILabel alloc] init];
+        _clockLabel.font = [UIFont systemFontOfSize:10];
+        _clockLabel.textColor = [UIColor colorWithRed:136/255.0 green:136/255.0 blue:136/255.0 alpha:1.0];
     }
     return _clockLabel;
 }
 
-- (HJFullTimeCellView *)fullTimeCell {
-    if (_fullTimeCell == nil) {
-        _fullTimeCell = [[HJFullTimeCellView alloc] init];
+- (UIView *)footer {
+    if (_footer == nil) {
+        _footer = [[UIView alloc] init];
+        _footer.backgroundColor = [UIColor colorWithRed:245/255.0 green:245/255.0 blue:245/255.0 alpha:1.0];
     }
-    return _fullTimeCell;
-}
-
-- (UIView *)footerView {
-    if (_footerView == nil) {
-        _footerView = [[UIView alloc] init];
-        _footerView.backgroundColor = [UIColor colorWithRed:221/255.0 green:221/255.0 blue:221/255.0 alpha:1.0];
-    }
-    return _footerView;
-}
-
-- (UIView *)bgView {
-    if (_bgView == nil) {
-        _bgView = [[UIView alloc] init];
-        _bgView.backgroundColor = [UIColor whiteColor];
-    }
-    return _bgView;
+    return _footer;
 }
 
 @end

+ 64 - 39
HappyJob/HappyJob/Join_拼工/HJJoinViewController.m

@@ -8,74 +8,90 @@
 
 #import "HJJoinViewController.h"
 #import "HJJoinTableViewCell.h"
-#import "HJJoinDetailViewController.h"
-
-@interface HJJoinViewController () <UITableViewDataSource, UITableViewDelegate>
+#import "HJPageListView.h"
+#import "HJPositionDataBox.h"
+#import "HJGetGroupPositionAPIManager.h"
+#import "UIViewController+FBNavBarRightButtonItems.h"
+#import "HJJoinAgreementViewController.h"
+
+@interface HJJoinViewController () <UITableViewDelegate>
+@property (nonatomic, strong) UIButton *agreementButton;
 @property (nonatomic, strong) UIImageView *headerImageView;
-@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) HJPageListView *pageListView;
+@property (nonatomic, strong) HJPositionDataBox *positionDataBox;
+@property (nonatomic, strong) HJGetGroupPositionAPIManager *getGroupPositionAPIManager;
 @end
 
 @implementation HJJoinViewController
 
 - (void)viewDidLoad {
     [super viewDidLoad];
-    [self.view addSubview:self.tableView];
     
+    [self fb_setupNavBarRightButtonItems:@[self.agreementButton]];
+    
+    [self.view addSubview:self.pageListView];
     [self makeConstraints];
+    
+    [self.getGroupPositionAPIManager start];
 }
 
 - (void)makeConstraints {
-    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.equalTo(self.view);
-        make.right.equalTo(self.view);
-        make.top.equalTo(self.view);
-        make.bottom.equalTo(self.view);
+    [self.pageListView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self.view);
     }];
 }
 
 #pragma mark - UITableViewDelegate
 
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return 40;
-}
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-    static NSString *cellIdentifier = @"HJJoinTableViewCell";
-    HJJoinTableViewCell  *cell = (HJJoinTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
-    
-    if (cell == nil) {
-        cell = [[HJJoinTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
-    }
-    return cell;
-}
-
-- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
-    return 140;
-}
-
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    HJJoinDetailViewController *vc = [[HJJoinDetailViewController alloc] init];
+    [tableView deselectRowAtIndexPath:indexPath animated:YES];
+    UIViewController *vc = [self.positionDataBox positionDetailViewControllerAtIndexPath:indexPath];
     vc.hidesBottomBarWhenPushed = YES;
     [self.navigationController pushViewController:vc animated:YES];
 }
 
-#pragma mark - CustomDelegate
-
 #pragma mark - event response
 
+- (void)agreementButtonClicked:(UIButton *)sender {
+    HJJoinAgreementViewController *vc = [[HJJoinAgreementViewController alloc] init];
+    vc.hidesBottomBarWhenPushed = YES;
+    [self.navigationController pushViewController:vc animated:YES];
+}
+
 #pragma mark - private methods
 
 #pragma mark - getters and setters
 
-- (UITableView *)tableView {
-    if (_tableView == nil) {
-        _tableView = [[UITableView alloc] init];
-        _tableView.delegate = self;
-        _tableView.dataSource = self;
-        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
-        _tableView.tableHeaderView = self.headerImageView;
+- (HJPositionDataBox *)positionDataBox {
+    if (_positionDataBox == nil) {
+        _positionDataBox = [[HJPositionDataBox alloc] init];
+    }
+    return _positionDataBox;
+}
+
+- (HJGetGroupPositionAPIManager *)getGroupPositionAPIManager {
+    if (_getGroupPositionAPIManager == nil) {
+        _getGroupPositionAPIManager = [[HJGetGroupPositionAPIManager alloc] init];
+        _getGroupPositionAPIManager.APIManagerDelegate = self.pageListView;
+        _getGroupPositionAPIManager.APIManagerInterceptor = self.pageListView;
     }
-    return _tableView;
+    return _getGroupPositionAPIManager;
+}
+
+- (HJPageListView *)pageListView {
+    if (_pageListView == nil) {
+        _pageListView = [[HJPageListView alloc] init];
+        _pageListView.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        _pageListView.tableView.tableHeaderView = self.headerImageView;
+        _pageListView.tableView.delegate = self;
+        _pageListView.tableView.dataSource = self.positionDataBox;
+        _pageListView.APIManager = self.getGroupPositionAPIManager;
+        _pageListView.dataBox = self.positionDataBox;
+        //自定义空白页
+        _pageListView.blankView.imageView.image = [UIImage imageNamed:@"join_blank"];
+        _pageListView.blankView.label.text = @"暂时还没有发布的拼工";
+    }
+    return _pageListView;
 }
 
 - (UIImageView *)headerImageView {
@@ -85,4 +101,13 @@
     return _headerImageView;
 }
 
+- (UIButton *)agreementButton {
+    if (_agreementButton == nil) {
+        _agreementButton = [UIButton buttonWithType:UIButtonTypeCustom];
+        [_agreementButton setImage:[UIImage imageNamed:@"join_agreement"] forState:UIControlStateNormal];
+        [_agreementButton addTarget:self action:@selector(agreementButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
+    }
+    return _agreementButton;
+}
+
 @end

+ 17 - 0
HappyJob/HappyJob/Join_拼工/JoinAPIManager/HJGetGroupPositionAPIManager.h

@@ -0,0 +1,17 @@
+//
+//  HJGetGroupPositionAPIManager.h
+//  HappyJob
+//
+//  Created by Bob on 2019/5/21.
+//  Copyright © 2019 Bob. All rights reserved.
+//
+
+#import "HJPageableAPIManager.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HJGetGroupPositionAPIManager : HJPageableAPIManager
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 17 - 0
HappyJob/HappyJob/Join_拼工/JoinAPIManager/HJGetGroupPositionAPIManager.m

@@ -0,0 +1,17 @@
+//
+//  HJGetGroupPositionAPIManager.m
+//  HappyJob
+//
+//  Created by Bob on 2019/5/21.
+//  Copyright © 2019 Bob. All rights reserved.
+//
+
+#import "HJGetGroupPositionAPIManager.h"
+
+@implementation HJGetGroupPositionAPIManager
+
+- (NSString *)methodName {
+    return @"hpposition/groupPosition";
+}
+
+@end

+ 3 - 3
HappyJob/HappyJob/Message_消息/消息空白页/HJMessageBlankView.h

@@ -1,8 +1,8 @@
 //
-//  HJMessageBlankView.h
+//  HJJoinAgreementViewController.h
 //  HappyJob
 //
-//  Created by Bob on 2019/4/28.
+//  Created by Bob on 2019/5/21.
 //  Copyright © 2019 Bob. All rights reserved.
 //
 
@@ -10,7 +10,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface HJMessageBlankView : UIView
+@interface HJJoinAgreementViewController : UIViewController
 
 @end
 

+ 58 - 0
HappyJob/HappyJob/Join_拼工/拼工规则/HJJoinAgreementViewController.m

@@ -0,0 +1,58 @@
+//
+//  HJJoinAgreementViewController.m
+//  HappyJob
+//
+//  Created by Bob on 2019/5/21.
+//  Copyright © 2019 Bob. All rights reserved.
+//
+
+#import "HJJoinAgreementViewController.h"
+#import "UIViewController+HJNavBar.h"
+
+@interface HJJoinAgreementViewController ()
+@property (nonatomic, strong) UILabel *contentLabel;
+@end
+
+@implementation HJJoinAgreementViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    
+    self.title = @"拼工规则";
+    [self hj_setupNavBarWithShadowImage:nil];
+    
+    [self.view addSubview:self.contentLabel];
+    [self.contentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).with.offset(25);
+        make.left.equalTo(self.view).with.offset(15);
+        make.right.equalTo(self.view).with.offset(-15);
+    }];
+}
+
+#pragma mark - getters and setters
+
+- (UILabel *)contentLabel {
+    if (_contentLabel == nil) {
+        _contentLabel = [[UILabel alloc] init];
+        _contentLabel.numberOfLines = 0;
+        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
+        paragraphStyle.lineSpacing = 4;
+        NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"请认真仔细阅读拼团规则:\n\n"
+                                             "1、 拼团有效期是自开团时刻起,到拼团时间结束为止;\n\n"
+                                             "2、 拼团有效期内,拼团人数达到3人,则拼团成功,未达到3人视为拼团失败,如在拼团有效期内拼团人数超过3人,也可成团,上不封顶。\n\n"
+                                             "3、 拼团总人数达5人或5人以上,可叠加奖励金,具体以当天实际情况为准;\n\n"
+                                             "4、 奖励金领取规则,依据返费规则,并与返费同时发放;\n\n"
+                                             "5、 拼团奖励金以当天实际情况为准;\n\n"
+                                             "6、 每天每个用户只能参加一次拼团,拼团结束时可再次参加;\n\n"
+                                             "7、 拼团规则不与经纪人规则同时适用;\n\n"
+                                             "8、 具体可咨询客服电话:400-692-0099;\n\n"
+                                             "9、 本活动最终解释权归开心工作所有。"
+                                                                                   attributes:@{NSParagraphStyleAttributeName: paragraphStyle, NSFontAttributeName: [UIFont systemFontOfSize:12], NSForegroundColorAttributeName: [UIColor colorWithRed:102/255.0 green:102/255.0 blue:102/255.0 alpha:1.0]}];
+        [string addAttributes:@{NSForegroundColorAttributeName: [UIColor colorWithRed:255/255.0 green:64/255.0 blue:14/255.0 alpha:1.0]}
+                        range:NSMakeRange(0, 12)];
+        _contentLabel.attributedText = string;
+    }
+    return _contentLabel;
+}
+
+@end

+ 12 - 42
HappyJob/HappyJob/Message_消息/HJMessageViewController.m

@@ -11,7 +11,6 @@
 #import "HJMessageDateTableViewCell.h"
 #import "UIViewController+FBNavBarRightButtonItems.h"
 #import "HJConfirmPanelViewController.h"
-#import "HJMessageBlankView.h"
 #import "HJPageListView.h"
 #import "HJMessageAPIManager.h"
 #import "HJClearMessageAPIManager.h"
@@ -19,8 +18,7 @@
 #import "UIView+FBProgressHUD.h"
 #import "HJReturnMoneyViewController.h"
 
-@interface HJMessageViewController () <UITableViewDelegate, FBAPIManagerDelegate, FBAPIManagerInterceptor>
-@property (nonatomic, strong) HJMessageBlankView *blankView;
+@interface HJMessageViewController () <UITableViewDelegate, FBAPIManagerDelegate>
 @property (nonatomic, strong) HJPageListView *pageListView;
 @property (nonatomic, strong) UIButton *delButton;
 @property (nonatomic, strong) HJMessageAPIManager *msgAPIManager;
@@ -36,20 +34,14 @@
     [super viewDidLoad];
     [self fb_setupNavBarRightButtonItems:@[self.delButton]];
     
-    // 添加空白页面
-    [self.view addSubview:self.blankView];
     // 添加消息列表页面
-    [self.view insertSubview:self.pageListView belowSubview:self.blankView];
-    
+    [self.view addSubview:self.pageListView];
     [self makeConstraints];
     
     [self.msgAPIManager start];
 }
 
 - (void)makeConstraints {
-    [self.blankView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.edges.equalTo(self.view);
-    }];
     [self.pageListView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.edges.equalTo(self.view);
     }];
@@ -58,6 +50,7 @@
 #pragma mark - UITableViewDelegate
 
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    [tableView deselectRowAtIndexPath:indexPath animated:YES];
     HJMessageModel *model = [self.msgDataBox messageModelAtIndexPath:indexPath];
     if (model.type == HJMessageTypePositionChange) {
         [self.tabBarController setSelectedIndex:0];
@@ -75,43 +68,24 @@
     }
 }
 
-#pragma mark - FBAPIManagerInterceptor
-
-- (BOOL)manager:(FBBaseAPIManager *)manager shouldStartCallAPIWithParams:(NSDictionary *)params {
-    if (manager == self.msgAPIManager) {
-        [self.view bringSubviewToFront:self.pageListView];
-    }
-    if (manager == self.clearMsgAPIManager) {
-        [self.view bringSubviewToFront:self.blankView];
-    }
-    
-    return [self.pageListView manager:manager shouldStartCallAPIWithParams:params];
-}
-
-- (void)managerShouldFinishCallAPI:(FBBaseAPIManager *)manager {
-    if (manager == self.msgAPIManager) {
-        [self.pageListView managerShouldFinishCallAPI:manager];
-    }
-}
-
 #pragma mark - FBAPIManagerDelegate
 
 - (void)managerCallAPIDidSuccess:(FBBaseAPIManager *)manager {
     if (manager == self.msgAPIManager) {
         [self.pageListView managerCallAPIDidSuccess:manager];
-        if (self.msgDataBox.isShowBlankView) {
-            [self.view bringSubviewToFront:self.blankView];
-        }
     }
     if (manager == self.clearMsgAPIManager) {
         NSString *successStr = [manager fetchDataWithBox:self.msgDataBox];
         [self.view fb_showSuccessWithStatus:successStr];
+        [self.pageListView.refreshFooter resetNoMoreData];
         [self.pageListView.tableView reloadData];
     }
 }
 
 - (void)managerCallAPIDidFailed:(FBBaseAPIManager *)manager {
-    [self.pageListView managerCallAPIDidFailed:manager];
+    if (manager == self.msgAPIManager) {
+        [self.pageListView managerCallAPIDidFailed:manager];
+    }
 }
 
 #pragma mark - event response
@@ -154,7 +128,6 @@
     if (_clearMsgAPIManager == nil) {
         _clearMsgAPIManager = [[HJClearMessageAPIManager alloc] init];
         _clearMsgAPIManager.APIManagerDelegate = self;
-        _clearMsgAPIManager.APIManagerInterceptor = self;
     }
     return _clearMsgAPIManager;
 }
@@ -163,7 +136,7 @@
     if (_msgAPIManager == nil) {
         _msgAPIManager = [[HJMessageAPIManager alloc] init];
         _msgAPIManager.APIManagerDelegate = self;
-        _msgAPIManager.APIManagerInterceptor = self;
+        _msgAPIManager.APIManagerInterceptor = self.pageListView;
     }
     return _msgAPIManager;
 }
@@ -177,13 +150,6 @@
     return _delButton;
 }
 
-- (HJMessageBlankView *)blankView {
-    if (_blankView == nil) {
-        _blankView = [[HJMessageBlankView alloc] init];
-    }
-    return _blankView;
-}
-
 - (HJPageListView *)pageListView {
     if (_pageListView == nil) {
         _pageListView = [[HJPageListView alloc] init];
@@ -192,6 +158,10 @@
         _pageListView.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
         _pageListView.APIManager = self.msgAPIManager;
         _pageListView.dataBox = self.msgDataBox;
+        //自定义空白页
+        _pageListView.blankView.imageView.image = [UIImage imageNamed:@"msg_blank"];
+        NSAttributedString *string = [[NSAttributedString alloc] initWithString:@"你和系统失联了?\n\n记得常回来看看"];
+        _pageListView.blankView.label.attributedText = string;
     }
     return _pageListView;
 }

+ 0 - 2
HappyJob/HappyJob/Message_消息/MessageAPIManager/HJMessageDataBox.h

@@ -20,8 +20,6 @@ typedef NS_ENUM(NSUInteger, HJMessageType) {
 };
 
 @interface HJMessageDataBox : NSObject <FBAPIManagerDataBox, UITableViewDataSource>
-@property (nonatomic, assign, readonly, getter=isShowBlankView) BOOL showBlankView;
-
 - (HJMessageModel *)messageModelAtIndexPath:(NSIndexPath *)indexPath;
 @end
 

+ 1 - 1
HappyJob/HappyJob/Message_消息/MessageAPIManager/HJMessageDataBox.m

@@ -39,7 +39,7 @@ static NSString * const HJMessageTableViewCellIdentifier = @"HJMessageTableViewC
     if (type == FBAPIManagerErrorTypeNoError) {
         if ([manager isKindOfClass:[HJMessageAPIManager class]]) {
             [self manager:(HJMessageAPIManager *)manager configDataSourceWithArray:[data valueForKeyPath:@"data.myMessage"]];
-            _showBlankView = (self.dataSource.count > 0) ? NO : YES;
+            return [self.dataSource copy];
         }
         if ([manager isKindOfClass:[HJClearMessageAPIManager class]]) {
             [self clearAllMessage];

+ 0 - 94
HappyJob/HappyJob/Message_消息/消息空白页/HJMessageBlankView.m

@@ -1,94 +0,0 @@
-//
-//  HJMessageBlankView.m
-//  HappyJob
-//
-//  Created by Bob on 2019/4/28.
-//  Copyright © 2019 Bob. All rights reserved.
-//
-
-#import "HJMessageBlankView.h"
-
-@interface HJMessageBlankView ()
-@property (nonatomic, strong) UIView *canvasView;
-@property (nonatomic, strong) UIImageView *imageView;
-@property (nonatomic, strong) UILabel *label1;
-@property (nonatomic, strong) UILabel *label2;
-@end
-
-@implementation HJMessageBlankView
-
-- (instancetype)init {
-    if (self = [super init]) {
-        self.backgroundColor = [UIColor whiteColor];
-        
-        [self addSubview:self.canvasView];
-        [self.canvasView addSubview:self.imageView];
-        [self.canvasView addSubview:self.label1];
-        [self.canvasView addSubview:self.label2];
-        
-        [self makeConstraints];
-    }
-    return self;
-}
-
-- (void)makeConstraints {
-    [self.imageView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.centerX.equalTo(self.canvasView);
-        make.size.mas_equalTo(self.imageView.image.size);
-    }];
-    [self.label1 mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.imageView.mas_bottom).with.offset(25);
-        make.centerX.equalTo(self.canvasView);
-    }];
-    [self.label2 mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.label1.mas_bottom).with.offset(10);
-        make.centerX.equalTo(self.canvasView);
-    }];
-    [self.canvasView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.equalTo(self.imageView);
-        make.left.right.equalTo(self.label1);
-        make.bottom.equalTo(self.label2);
-        make.center.equalTo(self);
-    }];
-}
-
-#pragma mark - getters and setters
-
-- (UIView *)canvasView {
-    if (_canvasView == nil) {
-        _canvasView = [[UIView alloc] init];
-    }
-    return _canvasView;
-}
-
-- (UIImageView *)imageView {
-    if (_imageView == nil) {
-        _imageView = [[UIImageView alloc] init];
-        _imageView.image = [UIImage imageNamed:@"msg_blank"];
-    }
-    return _imageView;
-}
-
-- (UILabel *)label1 {
-    if (_label1 == nil) {
-        _label1 = [[UILabel alloc] init];
-        _label1.text = @"你和系统失联了?";
-        _label1.textColor = [UIColor colorWithRed:204/255.0 green:204/255.0 blue:204/255.0 alpha:1.0];
-        _label1.font = [UIFont systemFontOfSize:16];
-        _label1.textAlignment = NSTextAlignmentCenter;
-    }
-    return _label1;
-}
-
-- (UILabel *)label2 {
-    if (_label2 == nil) {
-        _label2 = [[UILabel alloc] init];
-        _label2.text = @"记得常回来看看";
-        _label2.textColor = [UIColor colorWithRed:204/255.0 green:204/255.0 blue:204/255.0 alpha:1.0];
-        _label2.font = [UIFont systemFontOfSize:16];
-        _label2.textAlignment = NSTextAlignmentCenter;
-    }
-    return _label2;
-}
-
-@end

+ 7 - 1
HappyJob/HappyJob/Pageable_分页列表/HJPageListView.h

@@ -9,11 +9,17 @@
 #import <UIKit/UIKit.h>
 #import "FBBaseAPIManager.h"
 #import "FBAPIManagerDataBox.h"
+#import "HJBlankView.h"
+#import "HJRefreshHeaderView.h"
+#import "HJRefreshFooterView.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
 @interface HJPageListView : UIView <FBAPIManagerDelegate, FBAPIManagerInterceptor>
-@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong, readonly) HJRefreshHeaderView *refreshHeader;
+@property (nonatomic, strong, readonly) HJRefreshFooterView *refreshFooter;
+@property (nonatomic, strong, readonly) HJBlankView *blankView;
+@property (nonatomic, strong, readonly) UITableView *tableView;
 @property (nonatomic, assign, getter=isFirstLoading) BOOL firstLoading;
 @property (nonatomic, weak) FBBaseAPIManager<FBPageableAPIManager> *APIManager;
 @property (nonatomic, weak) id<FBAPIManagerDataBox> dataBox;

+ 36 - 9
HappyJob/HappyJob/Pageable_分页列表/HJPageListView.m

@@ -7,14 +7,15 @@
 //
 
 #import "HJPageListView.h"
-#import "HJRefreshHeaderView.h"
-#import "HJRefreshFooterView.h"
 #import "UIView+FBProgressHUD.h"
 #import "UIView+HJLoadingViewAndErrorView.h"
+#import <DZNEmptyDataSet/UIScrollView+EmptyDataSet.h>
 
-@interface HJPageListView ()
-@property (nonatomic, strong) HJRefreshHeaderView *refreshHeader;
-@property (nonatomic, strong) HJRefreshFooterView *refreshFooter;
+@interface HJPageListView () <DZNEmptyDataSetSource, DZNEmptyDataSetDelegate>
+@property (nonatomic, strong, readwrite) HJRefreshHeaderView *refreshHeader;
+@property (nonatomic, strong, readwrite) HJRefreshFooterView *refreshFooter;
+@property (nonatomic, strong, readwrite) HJBlankView *blankView;
+@property (nonatomic, strong, readwrite) UITableView *tableView;
 @end
 
 @implementation HJPageListView
@@ -28,13 +29,29 @@
                                forControlEvents:UIControlEventTouchUpInside];
         
         [self addSubview:self.tableView];
-        [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
-            make.edges.equalTo(self);
-        }];
+        [self makeConstraints];
     }
     return self;
 }
 
+- (void)makeConstraints {
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.equalTo(self);
+    }];
+}
+
+#pragma mark - DZNEmptyDataSetSource
+
+- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView {
+    return self.blankView;
+}
+
+#pragma mark - DZNEmptyDataSetDelegate
+
+- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView {
+    return YES;
+}
+
 #pragma mark - FBAPIManagerInterceptor
 
 - (BOOL)manager:(FBBaseAPIManager *)manager shouldStartCallAPIWithParams:(NSDictionary *)params {
@@ -63,7 +80,7 @@
 
 - (void)managerCallAPIDidSuccess:(FBBaseAPIManager *)manager {
     if (manager == self.APIManager) {
-        // 不需要根据返回值来处理视图,在DataBox类中做了封装
+        // 返回值通常是列表的DataSource数组,在DataBox类中做了封装
         [manager fetchDataWithBox:self.dataBox];
         [self.tableView reloadData];
     }
@@ -122,6 +139,9 @@
         _tableView.separatorInset = UIEdgeInsetsMake(0, 15, 0, 15);
         // 在内容显示不够满屏时,去除分割线
         _tableView.tableFooterView = [UIView new];
+        // 设置空白页
+        _tableView.emptyDataSetSource = self;
+        _tableView.emptyDataSetDelegate = self;
     }
     return _tableView;
 }
@@ -140,4 +160,11 @@
     return _refreshFooter;
 }
 
+- (HJBlankView *)blankView {
+    if (_blankView == nil) {
+        _blankView = [[HJBlankView alloc] init];
+    }
+    return _blankView;
+}
+
 @end

+ 1 - 1
HappyJob/HappyJob/Pageable_分页列表/PageableAPIManager/HJPageableAPIManager.m

@@ -69,7 +69,7 @@
     return FBAPIManagerRequestTypeGet;
 }
 
-- (void)call {
+- (void)start {
     _isFirstPage = YES;
     _currentPageNumber = 1;
     

+ 1 - 0
HappyJob/Podfile

@@ -21,5 +21,6 @@ target 'HappyJob' do
   pod 'SDWebImage', '~> 4.4.6'
   pod 'NSDictionary-NilSafe', '~> 0.2.0'
   pod 'MJRefresh', '~> 3.1.15.7'
+  pod 'DZNEmptyDataSet', '~> 1.8.1'
   pod 'XHLaunchAd', '~> 3.9.8'
 end

+ 5 - 1
HappyJob/Podfile.lock

@@ -17,6 +17,7 @@ PODS:
   - CocoaLumberjack (3.5.2):
     - CocoaLumberjack/Core (= 3.5.2)
   - CocoaLumberjack/Core (3.5.2)
+  - DZNEmptyDataSet (1.8.1)
   - FCUUID (1.3.1):
     - UICKeyChainStore (~> 2.1.0)
   - FLAnimatedImage (1.0.12)
@@ -43,6 +44,7 @@ PODS:
 DEPENDENCIES:
   - AFNetworking (~> 3.2.1)
   - CocoaLumberjack (~> 3.5.1)
+  - DZNEmptyDataSet (~> 1.8.1)
   - FCUUID (~> 1.3.1)
   - IQKeyboardManager (~> 6.2.0)
   - Masonry (~> 1.1.0)
@@ -62,6 +64,7 @@ SPEC REPOS:
   https://github.com/cocoapods/specs.git:
     - AFNetworking
     - CocoaLumberjack
+    - DZNEmptyDataSet
     - FCUUID
     - FLAnimatedImage
     - IQKeyboardManager
@@ -82,6 +85,7 @@ SPEC REPOS:
 SPEC CHECKSUMS:
   AFNetworking: b6f891fdfaed196b46c7a83cf209e09697b94057
   CocoaLumberjack: 118bf4a820efc641f79fa487b75ed928dccfae23
+  DZNEmptyDataSet: 9525833b9e68ac21c30253e1d3d7076cc828eaa7
   FCUUID: bb054fc90cd7cd99320f9f6ff8e130fe607fba05
   FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31
   IQKeyboardManager: 6194101620b73af5e67900b8f89707a99de0b804
@@ -99,6 +103,6 @@ SPEC CHECKSUMS:
   YTKNetwork: df8a7a5597bda1664a4efaa7ef871a818a887fe0
   YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
 
-PODFILE CHECKSUM: bc1d08e25cc558d55944944d1faff092369ced19
+PODFILE CHECKSUM: 6bfaff951006b73558ff97b8a6000dc2a84dfaf1
 
 COCOAPODS: 1.6.1

+ 9 - 0
HappyJob/Pods/DZNEmptyDataSet/LICENSE

@@ -0,0 +1,9 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 296 - 0
HappyJob/Pods/DZNEmptyDataSet/README.md

@@ -0,0 +1,296 @@
+DZNEmptyDataSet
+=================
+
+[![Pod Version](http://img.shields.io/cocoapods/v/DZNEmptyDataSet.svg)](http://cocoadocs.org/docsets/DZNEmptyDataSet/)
+[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
+[![License](http://img.shields.io/badge/license-MIT-blue.svg)](http://opensource.org/licenses/MIT)
+
+### Projects using this library
+
+[Add your project to the list here](https://github.com/dzenbot/DZNEmptyDataSet/wiki/Projects-using-DZNEmptyDataSet) and provide a (320px wide) render of the result.
+
+
+### The Empty Data Set Pattern
+Also known as *[Empty State](http://emptystat.es/)* or *[Blank Slate](http://patternry.com/p=blank-slate/)*.
+
+Most applications show lists of content (data sets), which many turn out to be empty at one point, specially for new users with blank accounts. Empty screens create confusion by not being clear about what's going on, if there is an error/bug or if the user is supposed to do something within your app to be able to consume the content.
+
+Please read this very interesting article about [*Designing For The Empty States*](http://tympanus.net/codrops/2013/01/09/designing-for-the-empty-states/).
+
+![Screenshots_Row1](https://raw.githubusercontent.com/dzenbot/UITableView-DataSet/master/Examples/Applications/Screenshots/Screenshots_row1.png)
+![Screenshots_Row2](https://raw.githubusercontent.com/dzenbot/UITableView-DataSet/master/Examples/Applications/Screenshots/Screenshots_row2.png)
+(*These are real life examples, available in the 'Applications' sample project*)
+
+**[Empty Data Sets](http://pttrns.com/?did=1&scid=30)** are helpful for:
+* Avoiding white-screens and communicating to your users why the screen is empty.
+* Calling to action (particularly as an onboarding process).
+* Avoiding other interruptive mechanisms like showing error alerts.
+* Being consistent and improving the user experience.
+* Delivering a brand presence.
+
+
+### Features
+* Compatible with UITableView and UICollectionView. Also compatible with UISearchDisplayController and UIScrollView.
+* Gives multiple possibilities of layout and appearance, by showing an image and/or title label and/or description label and/or button.
+* Uses NSAttributedString for easier appearance customisation.
+* Uses auto-layout to automagically center the content to the tableview, with auto-rotation support. Also accepts custom vertical and horizontal alignment.
+* Background color customisation.
+* Allows tap gesture on the whole tableview rectangle (useful for resigning first responder or similar actions).
+* For more advanced customisation, it allows a custom view.
+* Compatible with Storyboard.
+* Compatible with iOS 6 or later.
+* Compatible with iPhone and iPad.
+* **App Store ready**
+
+This library has been designed in a way where you won't need to extend UITableView or UICollectionView class. It will still work when using UITableViewController or UICollectionViewController.
+By just conforming to DZNEmptyDataSetSource & DZNEmptyDataSetDelegate, you will be able to fully customize the content and appearance of the empty states for your application.
+
+
+## Installation
+
+Available in [CocoaPods](http://cocoapods.org/?q=DZNEmptyDataSet)
+```ruby
+pod 'DZNEmptyDataSet'
+```
+
+To integrate DZNEmptyDataSet into your Xcode project using Carthage, specify it in your `Cartfile`:
+
+```ruby
+github "dzenbot/DZNEmptyDataSet"
+```
+
+
+## How to use
+For complete documentation, [visit CocoaPods' auto-generated doc](http://cocoadocs.org/docsets/DZNEmptyDataSet/)
+
+### Import
+```objc
+#import "UIScrollView+EmptyDataSet.h"
+```
+Unless you are importing as a framework, then do:
+```objc
+#import "<DZNEmptyDataSet/UIScrollView+EmptyDataSet.h>"
+```
+
+### Protocol Conformance
+Conform to datasource and/or delegate.
+```objc
+@interface MainViewController : UITableViewController <DZNEmptyDataSetSource, DZNEmptyDataSetDelegate>
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+
+    self.tableView.emptyDataSetSource = self;
+    self.tableView.emptyDataSetDelegate = self;
+    
+    // A little trick for removing the cell separators
+    self.tableView.tableFooterView = [UIView new];
+}
+```
+
+### Data Source Implementation
+Return the content you want to show on the empty state, and take advantage of NSAttributedString features to customise the text appearance.
+
+The image for the empty state:
+```objc
+- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView
+{
+    return [UIImage imageNamed:@"empty_placeholder"];
+}
+```
+
+The image view animation
+```objc
+- (CAAnimation *)imageAnimationForEmptyDataSet:(UIScrollView *)scrollView
+{
+    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath: @"transform"];
+    
+    animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
+    animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_2, 0.0, 0.0, 1.0)];
+    
+    animation.duration = 0.25;
+    animation.cumulative = YES;
+    animation.repeatCount = MAXFLOAT;
+    
+    return animation;
+}
+```
+
+The attributed string for the title of the empty state:
+```objc
+- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView
+{
+    NSString *text = @"Please Allow Photo Access";
+    
+    NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:18.0f],
+                                 NSForegroundColorAttributeName: [UIColor darkGrayColor]};
+    
+    return [[NSAttributedString alloc] initWithString:text attributes:attributes];
+}
+```
+
+The attributed string for the description of the empty state:
+```objc
+- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView
+{
+    NSString *text = @"This allows you to share photos from your library and save photos to your camera roll.";
+    
+    NSMutableParagraphStyle *paragraph = [NSMutableParagraphStyle new];
+    paragraph.lineBreakMode = NSLineBreakByWordWrapping;
+    paragraph.alignment = NSTextAlignmentCenter;
+    
+    NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:14.0f],
+                                 NSForegroundColorAttributeName: [UIColor lightGrayColor],
+                                 NSParagraphStyleAttributeName: paragraph};
+                                 
+    return [[NSAttributedString alloc] initWithString:text attributes:attributes];                      
+}
+```
+
+The attributed string to be used for the specified button state:
+```objc
+- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state
+{
+    NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:17.0f]};
+
+    return [[NSAttributedString alloc] initWithString:@"Continue" attributes:attributes];
+}
+```
+
+or the image to be used for the specified button state:
+```objc
+- (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state
+{
+    return [UIImage imageNamed:@"button_image"];
+}
+```
+
+The background color for the empty state:
+```objc
+- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView
+{
+    return [UIColor whiteColor];
+}
+```
+
+If you need a more complex layout, you can return a custom view instead:
+```objc
+- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView
+{
+    UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
+    [activityView startAnimating];
+    return activityView;
+}
+```
+
+Additionally, you can also adjust the vertical alignment of the content view (ie: useful when there is tableHeaderView visible):
+```objc
+- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView
+{
+    return -self.tableView.tableHeaderView.frame.size.height/2.0f;
+}
+```
+
+Finally, you can separate components from each other (default separation is 11 pts):
+```objc
+- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView
+{
+    return 20.0f;
+}
+```
+
+
+### Delegate Implementation
+Return the behaviours you would expect from the empty states, and receive the user events.
+
+Asks to know if the empty state should be rendered and displayed (Default is YES) :
+```objc
+- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView
+{
+    return YES;
+}
+```
+
+Asks for interaction permission (Default is YES) :
+```objc
+- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView
+{
+    return YES;
+}
+```
+
+Asks for scrolling permission (Default is NO) :
+```objc
+- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView
+{
+    return YES;
+}
+```
+
+Asks for image view animation permission (Default is NO) :
+```objc
+- (BOOL) emptyDataSetShouldAllowImageViewAnimate:(UIScrollView *)scrollView
+{
+    return YES;
+}
+```
+
+Notifies when the dataset view was tapped:
+```objc
+- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view
+{
+    // Do something
+}
+```
+
+Notifies when the data set call to action button was tapped:
+```objc
+- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button
+{
+    // Do something
+}
+```
+
+### Refresh layout
+If you need to refresh the empty state layout, simply call:
+
+```objc
+[self.tableView reloadData];
+```
+or
+```objc
+[self.collectionView reloadData];
+```
+depending of which you are using.
+
+### Force layout update
+You can also call `[self.tableView reloadEmptyDataSet]` to invalidate the current empty state layout and trigger a layout update, bypassing `-reloadData`. This might be useful if you have a lot of logic on your data source that you want to avoid calling, when not needed. `[self.scrollView reloadEmptyDataSet]` is the only way to refresh content when using with UIScrollView.
+
+
+## Sample projects
+
+#### Applications
+This project replicates several popular application's empty states (~20) with their exact content and appearance, such as Airbnb, Dropbox, Facebook, Foursquare, and many others. See how easy and flexible it is to customize the appearance of your empty states. You can also use this project as a playground to test things.
+
+#### Countries
+This project shows a list of the world countries loaded from CoreData. It uses NSFecthedResultController for filtering search. When searching and no content is matched, a simple empty state is shown. See how to interact between the UITableViewDataSource and the DZNEmptyDataSetSource protocols, while using a typical CoreData stack.
+
+#### Colors
+This project is a simple example of how this library also works with UICollectionView and UISearchDisplayController, while using Storyboards.
+
+
+## Collaboration
+Feel free to collaborate with ideas, issues and/or pull requests.
+
+
+## License
+(The MIT License)
+
+Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 280 - 0
HappyJob/Pods/DZNEmptyDataSet/Source/UIScrollView+EmptyDataSet.h

@@ -0,0 +1,280 @@
+//
+//  UIScrollView+EmptyDataSet.h
+//  DZNEmptyDataSet
+//  https://github.com/dzenbot/DZNEmptyDataSet
+//
+//  Created by Ignacio Romero Zurbuchen on 6/20/14.
+//  Copyright (c) 2016 DZN Labs. All rights reserved.
+//  Licence: MIT-Licence
+//
+
+#import <UIKit/UIKit.h>
+
+@protocol DZNEmptyDataSetSource;
+@protocol DZNEmptyDataSetDelegate;
+
+#define DZNEmptyDataSetDeprecated(instead) DEPRECATED_MSG_ATTRIBUTE(" Use " # instead " instead")
+
+/**
+ A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the view has no content to display.
+ @discussion It will work automatically, by just conforming to DZNEmptyDataSetSource, and returning the data you want to show.
+ */
+@interface UIScrollView (EmptyDataSet)
+
+/** The empty datasets data source. */
+@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetSource> emptyDataSetSource;
+/** The empty datasets delegate. */
+@property (nonatomic, weak) IBOutlet id <DZNEmptyDataSetDelegate> emptyDataSetDelegate;
+/** YES if any empty dataset is visible. */
+@property (nonatomic, readonly, getter = isEmptyDataSetVisible) BOOL emptyDataSetVisible;
+
+/**
+ Reloads the empty dataset content receiver.
+ @discussion Call this method to force all the data to refresh. Calling -reloadData is similar, but this forces only the empty dataset to reload, not the entire table view or collection view.
+ */
+- (void)reloadEmptyDataSet;
+
+@end
+
+
+/**
+ The object that acts as the data source of the empty datasets.
+ @discussion The data source must adopt the DZNEmptyDataSetSource protocol. The data source is not retained. All data source methods are optional.
+ */
+@protocol DZNEmptyDataSetSource <NSObject>
+@optional
+
+/**
+ Asks the data source for the title of the dataset.
+ The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
+ 
+ @param scrollView A scrollView subclass informing the data source.
+ @return An attributed string for the dataset title, combining font, text color, text pararaph style, etc.
+ */
+- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView;
+
+/**
+ Asks the data source for the description of the dataset.
+ The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
+ 
+ @param scrollView A scrollView subclass informing the data source.
+ @return An attributed string for the dataset description text, combining font, text color, text pararaph style, etc.
+ */
+- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView;
+
+/**
+ Asks the data source for the image of the dataset.
+ 
+ @param scrollView A scrollView subclass informing the data source.
+ @return An image for the dataset.
+ */
+- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView;
+
+
+/**
+ Asks the data source for a tint color of the image dataset. Default is nil.
+ 
+ @param scrollView A scrollView subclass object informing the data source.
+ @return A color to tint the image of the dataset.
+ */
+- (UIColor *)imageTintColorForEmptyDataSet:(UIScrollView *)scrollView;
+
+/**
+ *  Asks the data source for the image animation of the dataset.
+ *
+ *  @param scrollView A scrollView subclass object informing the delegate.
+ *
+ *  @return image animation
+ */
+- (CAAnimation *) imageAnimationForEmptyDataSet:(UIScrollView *) scrollView;
+
+/**
+ Asks the data source for the title to be used for the specified button state.
+ The dataset uses a fixed font style by default, if no attributes are set. If you want a different font style, return a attributed string.
+ 
+ @param scrollView A scrollView subclass object informing the data source.
+ @param state The state that uses the specified title. The possible values are described in UIControlState.
+ @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
+ */
+- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
+
+/**
+ Asks the data source for the image to be used for the specified button state.
+ This method will override buttonTitleForEmptyDataSet:forState: and present the image only without any text.
+ 
+ @param scrollView A scrollView subclass object informing the data source.
+ @param state The state that uses the specified title. The possible values are described in UIControlState.
+ @return An image for the dataset button imageview.
+ */
+- (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
+
+/**
+ Asks the data source for a background image to be used for the specified button state.
+ There is no default style for this call.
+ 
+ @param scrollView A scrollView subclass informing the data source.
+ @param state The state that uses the specified image. The values are described in UIControlState.
+ @return An attributed string for the dataset button title, combining font, text color, text pararaph style, etc.
+ */
+- (UIImage *)buttonBackgroundImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state;
+
+/**
+ Asks the data source for the background color of the dataset. Default is clear color.
+ 
+ @param scrollView A scrollView subclass object informing the data source.
+ @return A color to be applied to the dataset background view.
+ */
+- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView;
+
+/**
+ Asks the data source for a custom view to be displayed instead of the default views such as labels, imageview and button. Default is nil.
+ Use this method to show an activity view indicator for loading feedback, or for complete custom empty data set.
+ Returning a custom view will ignore -offsetForEmptyDataSet and -spaceHeightForEmptyDataSet configurations.
+ 
+ @param scrollView A scrollView subclass object informing the delegate.
+ @return The custom view.
+ */
+- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView;
+
+/**
+ Asks the data source for a offset for vertical and horizontal alignment of the content. Default is CGPointZero.
+ 
+ @param scrollView A scrollView subclass object informing the delegate.
+ @return The offset for vertical and horizontal alignment.
+ */
+- (CGPoint)offsetForEmptyDataSet:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-verticalOffsetForEmptyDataSet:);
+- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView;
+
+/**
+ Asks the data source for a vertical space between elements. Default is 11 pts.
+ 
+ @param scrollView A scrollView subclass object informing the delegate.
+ @return The space height between elements.
+ */
+- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView;
+
+@end
+
+
+/**
+ The object that acts as the delegate of the empty datasets.
+ @discussion The delegate can adopt the DZNEmptyDataSetDelegate protocol. The delegate is not retained. All delegate methods are optional.
+ 
+ @discussion All delegate methods are optional. Use this delegate for receiving action callbacks.
+ */
+@protocol DZNEmptyDataSetDelegate <NSObject>
+@optional
+
+/**
+ Asks the delegate to know if the empty dataset should fade in when displayed. Default is YES.
+ 
+ @param scrollView A scrollView subclass object informing the delegate.
+ @return YES if the empty dataset should fade in.
+ */
+- (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView;
+
+/**
+ Asks the delegate to know if the empty dataset should still be displayed when the amount of items is more than 0. Default is NO
+ 
+ @param scrollView A scrollView subclass object informing the delegate.
+ @return YES if empty dataset should be forced to display
+ */
+- (BOOL)emptyDataSetShouldBeForcedToDisplay:(UIScrollView *)scrollView;
+
+/**
+ Asks the delegate to know if the empty dataset should be rendered and displayed. Default is YES.
+ 
+ @param scrollView A scrollView subclass object informing the delegate.
+ @return YES if the empty dataset should show.
+ */
+- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView;
+
+/**
+ Asks the delegate for touch permission. Default is YES.
+ 
+ @param scrollView A scrollView subclass object informing the delegate.
+ @return YES if the empty dataset receives touch gestures.
+ */
+- (BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView;
+
+/**
+ Asks the delegate for scroll permission. Default is NO.
+ 
+ @param scrollView A scrollView subclass object informing the delegate.
+ @return YES if the empty dataset is allowed to be scrollable.
+ */
+- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView;
+
+/**
+ Asks the delegate for image view animation permission. Default is NO.
+ Make sure to return a valid CAAnimation object from imageAnimationForEmptyDataSet:
+ 
+ @param scrollView A scrollView subclass object informing the delegate.
+ @return YES if the empty dataset is allowed to animate
+ */
+- (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView;
+
+/**
+ Tells the delegate that the empty dataset view was tapped.
+ Use this method either to resignFirstResponder of a textfield or searchBar.
+ 
+ @param scrollView A scrollView subclass informing the delegate.
+ */
+- (void)emptyDataSetDidTapView:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapView:);
+
+/**
+ Tells the delegate that the action button was tapped.
+ 
+ @param scrollView A scrollView subclass informing the delegate.
+ */
+- (void)emptyDataSetDidTapButton:(UIScrollView *)scrollView DZNEmptyDataSetDeprecated(-emptyDataSet:didTapButton:);
+
+/**
+ Tells the delegate that the empty dataset view was tapped.
+ Use this method either to resignFirstResponder of a textfield or searchBar.
+ 
+ @param scrollView A scrollView subclass informing the delegate.
+ @param view the view tapped by the user
+ */
+- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view;
+
+/**
+ Tells the delegate that the action button was tapped.
+ 
+ @param scrollView A scrollView subclass informing the delegate.
+ @param button the button tapped by the user
+ */
+- (void)emptyDataSet:(UIScrollView *)scrollView didTapButton:(UIButton *)button;
+
+/**
+ Tells the delegate that the empty data set will appear.
+
+ @param scrollView A scrollView subclass informing the delegate.
+ */
+- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView;
+
+/**
+ Tells the delegate that the empty data set did appear.
+
+ @param scrollView A scrollView subclass informing the delegate.
+ */
+- (void)emptyDataSetDidAppear:(UIScrollView *)scrollView;
+
+/**
+ Tells the delegate that the empty data set will disappear.
+
+ @param scrollView A scrollView subclass informing the delegate.
+ */
+- (void)emptyDataSetWillDisappear:(UIScrollView *)scrollView;
+
+/**
+ Tells the delegate that the empty data set did disappear.
+
+ @param scrollView A scrollView subclass informing the delegate.
+ */
+- (void)emptyDataSetDidDisappear:(UIScrollView *)scrollView;
+
+@end
+
+#undef DZNEmptyDataSetDeprecated
+

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1074 - 0
HappyJob/Pods/DZNEmptyDataSet/Source/UIScrollView+EmptyDataSet.m


+ 5 - 1
HappyJob/Pods/Manifest.lock

@@ -17,6 +17,7 @@ PODS:
   - CocoaLumberjack (3.5.2):
     - CocoaLumberjack/Core (= 3.5.2)
   - CocoaLumberjack/Core (3.5.2)
+  - DZNEmptyDataSet (1.8.1)
   - FCUUID (1.3.1):
     - UICKeyChainStore (~> 2.1.0)
   - FLAnimatedImage (1.0.12)
@@ -43,6 +44,7 @@ PODS:
 DEPENDENCIES:
   - AFNetworking (~> 3.2.1)
   - CocoaLumberjack (~> 3.5.1)
+  - DZNEmptyDataSet (~> 1.8.1)
   - FCUUID (~> 1.3.1)
   - IQKeyboardManager (~> 6.2.0)
   - Masonry (~> 1.1.0)
@@ -62,6 +64,7 @@ SPEC REPOS:
   https://github.com/cocoapods/specs.git:
     - AFNetworking
     - CocoaLumberjack
+    - DZNEmptyDataSet
     - FCUUID
     - FLAnimatedImage
     - IQKeyboardManager
@@ -82,6 +85,7 @@ SPEC REPOS:
 SPEC CHECKSUMS:
   AFNetworking: b6f891fdfaed196b46c7a83cf209e09697b94057
   CocoaLumberjack: 118bf4a820efc641f79fa487b75ed928dccfae23
+  DZNEmptyDataSet: 9525833b9e68ac21c30253e1d3d7076cc828eaa7
   FCUUID: bb054fc90cd7cd99320f9f6ff8e130fe607fba05
   FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31
   IQKeyboardManager: 6194101620b73af5e67900b8f89707a99de0b804
@@ -99,6 +103,6 @@ SPEC CHECKSUMS:
   YTKNetwork: df8a7a5597bda1664a4efaa7ef871a818a887fe0
   YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
 
-PODFILE CHECKSUM: bc1d08e25cc558d55944944d1faff092369ced19
+PODFILE CHECKSUM: 6bfaff951006b73558ff97b8a6000dc2a84dfaf1
 
 COCOAPODS: 1.6.1

Dosya farkı çok büyük olduğundan ihmal edildi
+ 2457 - 2270
HappyJob/Pods/Pods.xcodeproj/project.pbxproj


+ 60 - 0
HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/DZNEmptyDataSet.xcscheme

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "0930"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForAnalyzing = "YES"
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "3310EEFF328C58D7A02083727BC09E65"
+               BuildableName = "DZNEmptyDataSet.framework"
+               BlueprintName = "DZNEmptyDataSet"
+               ReferencedContainer = "container:Pods.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      buildConfiguration = "Debug">
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </TestAction>
+   <LaunchAction
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      buildConfiguration = "Debug"
+      allowLocationSimulation = "YES">
+      <AdditionalOptions>
+      </AdditionalOptions>
+   </LaunchAction>
+   <ProfileAction
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES"
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 2 - 2
HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/Pods-HappyJob.xcscheme

@@ -14,7 +14,7 @@
             buildForAnalyzing = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "98A220B879E00EB19EE22B0FA9E1062E"
+               BlueprintIdentifier = "6B3EE9D2EACC0A606935A587B5D0B94A"
                BuildableName = "Pods_HappyJob.framework"
                BlueprintName = "Pods-HappyJob"
                ReferencedContainer = "container:Pods.xcodeproj">
@@ -45,7 +45,7 @@
       <MacroExpansion>
          <BuildableReference
             BuildableIdentifier = "primary"
-            BlueprintIdentifier = "98A220B879E00EB19EE22B0FA9E1062E"
+            BlueprintIdentifier = "6B3EE9D2EACC0A606935A587B5D0B94A"
             BuildableName = "Pods_HappyJob.framework"
             BlueprintName = "Pods-HappyJob"
             ReferencedContainer = "container:Pods.xcodeproj">

+ 1 - 1
HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/SDCycleScrollView.xcscheme

@@ -14,7 +14,7 @@
             buildForArchiving = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "ED4F2300927F7D3974A02E7FF215CE6A"
+               BlueprintIdentifier = "5A90D05C4E6BFDD6008791407F00C3F6"
                BuildableName = "SDCycleScrollView.framework"
                BlueprintName = "SDCycleScrollView"
                ReferencedContainer = "container:Pods.xcodeproj">

+ 1 - 1
HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/SDWebImage.xcscheme

@@ -14,7 +14,7 @@
             buildForArchiving = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "BD34A3A2B2E1CF213702037336E158DC"
+               BlueprintIdentifier = "15D949D4FE36F0DE7683D89D9571C365"
                BuildableName = "SDWebImage.framework"
                BlueprintName = "SDWebImage"
                ReferencedContainer = "container:Pods.xcodeproj">

+ 1 - 1
HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/SGEasyButton.xcscheme

@@ -14,7 +14,7 @@
             buildForArchiving = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "FD3591FBAED4A2D90A6110E335B4B855"
+               BlueprintIdentifier = "FAF44A78FD96D31DA5FCDE50370AD5B7"
                BuildableName = "SGEasyButton.framework"
                BlueprintName = "SGEasyButton"
                ReferencedContainer = "container:Pods.xcodeproj">

+ 1 - 1
HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/SVProgressHUD.xcscheme

@@ -14,7 +14,7 @@
             buildForArchiving = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "6B23BC130E51F885FEBB8E48F89CFE11"
+               BlueprintIdentifier = "5BF20A03C77FEA9F90DDDA7B61E47737"
                BuildableName = "SVProgressHUD.framework"
                BlueprintName = "SVProgressHUD"
                ReferencedContainer = "container:Pods.xcodeproj">

+ 1 - 1
HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/TXScrollLabelView.xcscheme

@@ -14,7 +14,7 @@
             buildForArchiving = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "B312C7B04863505303E772067ADC3B4F"
+               BlueprintIdentifier = "756A6C8118456504F7BA8216A47863EE"
                BuildableName = "TXScrollLabelView.framework"
                BlueprintName = "TXScrollLabelView"
                ReferencedContainer = "container:Pods.xcodeproj">

+ 1 - 1
HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/WechatOpenSDK.xcscheme

@@ -14,7 +14,7 @@
             buildForArchiving = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "85275F03663E6922A7721969FAB259E9"
+               BlueprintIdentifier = "19DB00A6049172AEAE5219AB324EB9A4"
                BuildableName = "WechatOpenSDK"
                BlueprintName = "WechatOpenSDK"
                ReferencedContainer = "container:Pods.xcodeproj">

+ 1 - 1
HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/XHLaunchAd.xcscheme

@@ -14,7 +14,7 @@
             buildForArchiving = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "0844EBDB499F268963B52DE17B68AF24"
+               BlueprintIdentifier = "574663BA7D99E4CFC7BAE7713A6BDB32"
                BuildableName = "XHLaunchAd.framework"
                BlueprintName = "XHLaunchAd"
                ReferencedContainer = "container:Pods.xcodeproj">

+ 1 - 1
HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/YTKNetwork.xcscheme

@@ -14,7 +14,7 @@
             buildForArchiving = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "2C6756E85AA1B0CE3C342431750FF688"
+               BlueprintIdentifier = "3C33B38F466EEFCE46E3FA72150281A6"
                BuildableName = "YTKNetwork.framework"
                BlueprintName = "YTKNetwork"
                ReferencedContainer = "container:Pods.xcodeproj">

+ 1 - 1
HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/YYModel.xcscheme

@@ -14,7 +14,7 @@
             buildForArchiving = "YES">
             <BuildableReference
                BuildableIdentifier = "primary"
-               BlueprintIdentifier = "1662F8A019019E0D14D4BD4D3D8B4B0C"
+               BlueprintIdentifier = "661F0A500841FCF4ADF8693371313AF4"
                BuildableName = "YYModel.framework"
                BlueprintName = "YYModel"
                ReferencedContainer = "container:Pods.xcodeproj">

+ 5 - 0
HappyJob/Pods/Pods.xcodeproj/xcuserdata/Bob.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -14,6 +14,11 @@
 			<key>isShown</key>
 			<false/>
 		</dict>
+		<key>DZNEmptyDataSet.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
 		<key>FCUUID.xcscheme</key>
 		<dict>
 			<key>isShown</key>

+ 26 - 0
HappyJob/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-Info.plist

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>CFBundleDevelopmentRegion</key>
+  <string>en</string>
+  <key>CFBundleExecutable</key>
+  <string>${EXECUTABLE_NAME}</string>
+  <key>CFBundleIdentifier</key>
+  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>${PRODUCT_NAME}</string>
+  <key>CFBundlePackageType</key>
+  <string>FMWK</string>
+  <key>CFBundleShortVersionString</key>
+  <string>1.8.1</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>${CURRENT_PROJECT_VERSION}</string>
+  <key>NSPrincipalClass</key>
+  <string></string>
+</dict>
+</plist>

+ 5 - 0
HappyJob/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-dummy.m

@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_DZNEmptyDataSet : NSObject
+@end
+@implementation PodsDummy_DZNEmptyDataSet
+@end

+ 12 - 0
HappyJob/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-prefix.pch

@@ -0,0 +1,12 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+

+ 17 - 0
HappyJob/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet-umbrella.h

@@ -0,0 +1,17 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
+#import "UIScrollView+EmptyDataSet.h"
+
+FOUNDATION_EXPORT double DZNEmptyDataSetVersionNumber;
+FOUNDATION_EXPORT const unsigned char DZNEmptyDataSetVersionString[];
+

+ 6 - 0
HappyJob/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet.modulemap

@@ -0,0 +1,6 @@
+framework module DZNEmptyDataSet {
+  umbrella header "DZNEmptyDataSet-umbrella.h"
+
+  export *
+  module * { export * }
+}

+ 9 - 0
HappyJob/Pods/Target Support Files/DZNEmptyDataSet/DZNEmptyDataSet.xcconfig

@@ -0,0 +1,9 @@
+CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DZNEmptyDataSet
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+OTHER_LDFLAGS = $(inherited) -framework "UIKit"
+PODS_BUILD_DIR = ${BUILD_DIR}
+PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/DZNEmptyDataSet
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES

Dosya farkı çok büyük olduğundan ihmal edildi
+ 13 - 0
HappyJob/Pods/Target Support Files/Pods-HappyJob/Pods-HappyJob-acknowledgements.markdown


+ 19 - 0
HappyJob/Pods/Target Support Files/Pods-HappyJob/Pods-HappyJob-acknowledgements.plist

@@ -69,6 +69,25 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 			<key>FooterText</key>
 			<string>The MIT License (MIT)
 
+Copyright (c) 2016 Ignacio Romero Zurbuchen iromero@dzen.cl
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>DZNEmptyDataSet</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>The MIT License (MIT)
+
 Copyright (c) 2016 Fabio Caccamo - fabio.caccamo@gmail.com
 
 Permission is hereby granted, free of charge, to any person obtaining a copy

+ 2 - 0
HappyJob/Pods/Target Support Files/Pods-HappyJob/Pods-HappyJob-frameworks.sh

@@ -155,6 +155,7 @@ strip_invalid_archs() {
 if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/CocoaLumberjack/CocoaLumberjack.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/DZNEmptyDataSet/DZNEmptyDataSet.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/FCUUID/FCUUID.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardManager/IQKeyboardManager.framework"
@@ -174,6 +175,7 @@ fi
 if [[ "$CONFIGURATION" == "Release" ]]; then
   install_framework "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/CocoaLumberjack/CocoaLumberjack.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/DZNEmptyDataSet/DZNEmptyDataSet.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/FCUUID/FCUUID.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework"
   install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardManager/IQKeyboardManager.framework"

Dosya farkı çok büyük olduğundan ihmal edildi
+ 4 - 4
HappyJob/Pods/Target Support Files/Pods-HappyJob/Pods-HappyJob.debug.xcconfig


Dosya farkı çok büyük olduğundan ihmal edildi
+ 4 - 4
HappyJob/Pods/Target Support Files/Pods-HappyJob/Pods-HappyJob.release.xcconfig