Showing
38 changed files
with
1038 additions
and
84 deletions
... | @@ -7,7 +7,7 @@ | ... | @@ -7,7 +7,7 @@ |
7 | <key>Pods-SwiftWarplyFramework.xcscheme_^#shared#^_</key> | 7 | <key>Pods-SwiftWarplyFramework.xcscheme_^#shared#^_</key> |
8 | <dict> | 8 | <dict> |
9 | <key>orderHint</key> | 9 | <key>orderHint</key> |
10 | - <integer>0</integer> | 10 | + <integer>1</integer> |
11 | </dict> | 11 | </dict> |
12 | </dict> | 12 | </dict> |
13 | </dict> | 13 | </dict> | ... | ... |
... | @@ -7,6 +7,9 @@ | ... | @@ -7,6 +7,9 @@ |
7 | objects = { | 7 | objects = { |
8 | 8 | ||
9 | /* Begin PBXBuildFile section */ | 9 | /* Begin PBXBuildFile section */ |
10 | + 1E116F682DE845B1009AE791 /* ProfileFilterCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1E116F672DE845B1009AE791 /* ProfileFilterCollectionViewCell.xib */; }; | ||
11 | + 1E116F692DE845B1009AE791 /* ProfileFilterCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E116F662DE845B1009AE791 /* ProfileFilterCollectionViewCell.swift */; }; | ||
12 | + 1E116F6B2DE86CBA009AE791 /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E116F6A2DE86CAD009AE791 /* Models.swift */; }; | ||
10 | 1E4C4CFB2DE6014500279AAD /* CopyableLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4C4CFA2DE6014500279AAD /* CopyableLabel.swift */; }; | 13 | 1E4C4CFB2DE6014500279AAD /* CopyableLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4C4CFA2DE6014500279AAD /* CopyableLabel.swift */; }; |
11 | 1E64E1832DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1E64E1822DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib */; }; | 14 | 1E64E1832DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1E64E1822DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib */; }; |
12 | 1E64E1842DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E64E1812DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift */; }; | 15 | 1E64E1842DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E64E1812DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift */; }; |
... | @@ -27,6 +30,14 @@ | ... | @@ -27,6 +30,14 @@ |
27 | 1EBF5F072840E13F00B8B17F /* SwiftEventBus in Frameworks */ = {isa = PBXBuildFile; productRef = 1EBF5F062840E13F00B8B17F /* SwiftEventBus */; }; | 30 | 1EBF5F072840E13F00B8B17F /* SwiftEventBus in Frameworks */ = {isa = PBXBuildFile; productRef = 1EBF5F062840E13F00B8B17F /* SwiftEventBus */; }; |
28 | 1ED41E4C2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ED41E4A2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift */; }; | 31 | 1ED41E4C2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ED41E4A2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift */; }; |
29 | 1ED41E4D2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1ED41E4B2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib */; }; | 32 | 1ED41E4D2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1ED41E4B2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib */; }; |
33 | + 1EDBAF042DE843CA00911E79 /* ProfileCouponTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1EDBAF032DE843CA00911E79 /* ProfileCouponTableViewCell.xib */; }; | ||
34 | + 1EDBAF052DE843CA00911E79 /* ProfileCouponTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDBAF022DE843CA00911E79 /* ProfileCouponTableViewCell.swift */; }; | ||
35 | + 1EDBAF082DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1EDBAF072DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.xib */; }; | ||
36 | + 1EDBAF092DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDBAF062DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.swift */; }; | ||
37 | + 1EDBAF0C2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1EDBAF0B2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.xib */; }; | ||
38 | + 1EDBAF0D2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDBAF0A2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.swift */; }; | ||
39 | + 1EDBAF102DE8443B00911E79 /* ProfileHeaderTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1EDBAF0F2DE8443B00911E79 /* ProfileHeaderTableViewCell.xib */; }; | ||
40 | + 1EDBAF112DE8443B00911E79 /* ProfileHeaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDBAF0E2DE8443B00911E79 /* ProfileHeaderTableViewCell.swift */; }; | ||
30 | 7630AD9A6242D60846D6750C /* Pods_SwiftWarplyFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0D5F56DD4E5371A50AD2D87 /* Pods_SwiftWarplyFramework.framework */; }; | 41 | 7630AD9A6242D60846D6750C /* Pods_SwiftWarplyFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0D5F56DD4E5371A50AD2D87 /* Pods_SwiftWarplyFramework.framework */; }; |
31 | A07936762885E9CC00064122 /* UIColorExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A07936752885E9CC00064122 /* UIColorExtensions.swift */; }; | 42 | A07936762885E9CC00064122 /* UIColorExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A07936752885E9CC00064122 /* UIColorExtensions.swift */; }; |
32 | E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6A77852282933340045BBA8 /* SwiftWarplyFramework.docc */; }; | 43 | E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6A77852282933340045BBA8 /* SwiftWarplyFramework.docc */; }; |
... | @@ -151,6 +162,9 @@ | ... | @@ -151,6 +162,9 @@ |
151 | 162 | ||
152 | /* Begin PBXFileReference section */ | 163 | /* Begin PBXFileReference section */ |
153 | 1E108A9728A3FA9B0008B8E7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | 164 | 1E108A9728A3FA9B0008B8E7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; |
165 | + 1E116F662DE845B1009AE791 /* ProfileFilterCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileFilterCollectionViewCell.swift; sourceTree = "<group>"; }; | ||
166 | + 1E116F672DE845B1009AE791 /* ProfileFilterCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileFilterCollectionViewCell.xib; sourceTree = "<group>"; }; | ||
167 | + 1E116F6A2DE86CAD009AE791 /* Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Models.swift; sourceTree = "<group>"; }; | ||
154 | 1E4C4CFA2DE6014500279AAD /* CopyableLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyableLabel.swift; sourceTree = "<group>"; }; | 168 | 1E4C4CFA2DE6014500279AAD /* CopyableLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyableLabel.swift; sourceTree = "<group>"; }; |
155 | 1E64E1812DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRewardsOfferCollectionViewCell.swift; sourceTree = "<group>"; }; | 169 | 1E64E1812DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRewardsOfferCollectionViewCell.swift; sourceTree = "<group>"; }; |
156 | 1E64E1822DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsOfferCollectionViewCell.xib; sourceTree = "<group>"; }; | 170 | 1E64E1822DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsOfferCollectionViewCell.xib; sourceTree = "<group>"; }; |
... | @@ -169,6 +183,14 @@ | ... | @@ -169,6 +183,14 @@ |
169 | 1EB4F42A2DE0A0AF00D934C0 /* MyRewardsOffersScrollTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsOffersScrollTableViewCell.xib; sourceTree = "<group>"; }; | 183 | 1EB4F42A2DE0A0AF00D934C0 /* MyRewardsOffersScrollTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsOffersScrollTableViewCell.xib; sourceTree = "<group>"; }; |
170 | 1ED41E4A2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRewardsBannerOfferCollectionViewCell.swift; sourceTree = "<group>"; }; | 184 | 1ED41E4A2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRewardsBannerOfferCollectionViewCell.swift; sourceTree = "<group>"; }; |
171 | 1ED41E4B2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsBannerOfferCollectionViewCell.xib; sourceTree = "<group>"; }; | 185 | 1ED41E4B2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsBannerOfferCollectionViewCell.xib; sourceTree = "<group>"; }; |
186 | + 1EDBAF022DE843CA00911E79 /* ProfileCouponTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileCouponTableViewCell.swift; sourceTree = "<group>"; }; | ||
187 | + 1EDBAF032DE843CA00911E79 /* ProfileCouponTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileCouponTableViewCell.xib; sourceTree = "<group>"; }; | ||
188 | + 1EDBAF062DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileCouponFiltersTableViewCell.swift; sourceTree = "<group>"; }; | ||
189 | + 1EDBAF072DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileCouponFiltersTableViewCell.xib; sourceTree = "<group>"; }; | ||
190 | + 1EDBAF0A2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileQuestionnaireTableViewCell.swift; sourceTree = "<group>"; }; | ||
191 | + 1EDBAF0B2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileQuestionnaireTableViewCell.xib; sourceTree = "<group>"; }; | ||
192 | + 1EDBAF0E2DE8443B00911E79 /* ProfileHeaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileHeaderTableViewCell.swift; sourceTree = "<group>"; }; | ||
193 | + 1EDBAF0F2DE8443B00911E79 /* ProfileHeaderTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileHeaderTableViewCell.xib; sourceTree = "<group>"; }; | ||
172 | A07936752885E9CC00064122 /* UIColorExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColorExtensions.swift; sourceTree = "<group>"; }; | 194 | A07936752885E9CC00064122 /* UIColorExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColorExtensions.swift; sourceTree = "<group>"; }; |
173 | A9B7BE01A4E812DE49866EF8 /* Pods-SwiftWarplyFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWarplyFramework.debug.xcconfig"; path = "Target Support Files/Pods-SwiftWarplyFramework/Pods-SwiftWarplyFramework.debug.xcconfig"; sourceTree = "<group>"; }; | 195 | A9B7BE01A4E812DE49866EF8 /* Pods-SwiftWarplyFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWarplyFramework.debug.xcconfig"; path = "Target Support Files/Pods-SwiftWarplyFramework/Pods-SwiftWarplyFramework.debug.xcconfig"; sourceTree = "<group>"; }; |
174 | B9EB8A451EF0C5AD75094EEE /* Pods-SwiftWarplyFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWarplyFramework.release.xcconfig"; path = "Target Support Files/Pods-SwiftWarplyFramework/Pods-SwiftWarplyFramework.release.xcconfig"; sourceTree = "<group>"; }; | 196 | B9EB8A451EF0C5AD75094EEE /* Pods-SwiftWarplyFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWarplyFramework.release.xcconfig"; path = "Target Support Files/Pods-SwiftWarplyFramework/Pods-SwiftWarplyFramework.release.xcconfig"; sourceTree = "<group>"; }; |
... | @@ -311,6 +333,7 @@ | ... | @@ -311,6 +333,7 @@ |
311 | 1E00E6A22DDF71BD0012F164 /* models */ = { | 333 | 1E00E6A22DDF71BD0012F164 /* models */ = { |
312 | isa = PBXGroup; | 334 | isa = PBXGroup; |
313 | children = ( | 335 | children = ( |
336 | + 1E116F6A2DE86CAD009AE791 /* Models.swift */, | ||
314 | ); | 337 | ); |
315 | path = models; | 338 | path = models; |
316 | sourceTree = "<group>"; | 339 | sourceTree = "<group>"; |
... | @@ -383,6 +406,11 @@ | ... | @@ -383,6 +406,11 @@ |
383 | 1EA8E5BC2DDF34FB00CD3418 /* cells */ = { | 406 | 1EA8E5BC2DDF34FB00CD3418 /* cells */ = { |
384 | isa = PBXGroup; | 407 | isa = PBXGroup; |
385 | children = ( | 408 | children = ( |
409 | + 1EDBAF122DE844C500911E79 /* ProfileFilterCollectionViewCell */, | ||
410 | + 1EDBAF012DE8439000911E79 /* ProfileCouponTableViewCell */, | ||
411 | + 1EDBAF002DE842A700911E79 /* ProfileCouponFiltersTableViewCell */, | ||
412 | + 1EDBAEFF2DE8420500911E79 /* ProfileQuestionnaireTableViewCell */, | ||
413 | + 1EDBAEFE2DE841CE00911E79 /* ProfileHeaderTableViewCell */, | ||
386 | 1E64E1802DE48DD600543217 /* MyRewardsOfferCollectionViewCell */, | 414 | 1E64E1802DE48DD600543217 /* MyRewardsOfferCollectionViewCell */, |
387 | 1ED41E492DE0C21800836ABA /* MyRewardsBannerOfferCollectionViewCell */, | 415 | 1ED41E492DE0C21800836ABA /* MyRewardsBannerOfferCollectionViewCell */, |
388 | 1EB4F4282DE0A09500D934C0 /* MyRewardsOffersScrollTableViewCell */, | 416 | 1EB4F4282DE0A09500D934C0 /* MyRewardsOffersScrollTableViewCell */, |
... | @@ -418,6 +446,51 @@ | ... | @@ -418,6 +446,51 @@ |
418 | path = MyRewardsBannerOfferCollectionViewCell; | 446 | path = MyRewardsBannerOfferCollectionViewCell; |
419 | sourceTree = "<group>"; | 447 | sourceTree = "<group>"; |
420 | }; | 448 | }; |
449 | + 1EDBAEFE2DE841CE00911E79 /* ProfileHeaderTableViewCell */ = { | ||
450 | + isa = PBXGroup; | ||
451 | + children = ( | ||
452 | + 1EDBAF0E2DE8443B00911E79 /* ProfileHeaderTableViewCell.swift */, | ||
453 | + 1EDBAF0F2DE8443B00911E79 /* ProfileHeaderTableViewCell.xib */, | ||
454 | + ); | ||
455 | + path = ProfileHeaderTableViewCell; | ||
456 | + sourceTree = "<group>"; | ||
457 | + }; | ||
458 | + 1EDBAEFF2DE8420500911E79 /* ProfileQuestionnaireTableViewCell */ = { | ||
459 | + isa = PBXGroup; | ||
460 | + children = ( | ||
461 | + 1EDBAF0A2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.swift */, | ||
462 | + 1EDBAF0B2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.xib */, | ||
463 | + ); | ||
464 | + path = ProfileQuestionnaireTableViewCell; | ||
465 | + sourceTree = "<group>"; | ||
466 | + }; | ||
467 | + 1EDBAF002DE842A700911E79 /* ProfileCouponFiltersTableViewCell */ = { | ||
468 | + isa = PBXGroup; | ||
469 | + children = ( | ||
470 | + 1EDBAF062DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.swift */, | ||
471 | + 1EDBAF072DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.xib */, | ||
472 | + ); | ||
473 | + path = ProfileCouponFiltersTableViewCell; | ||
474 | + sourceTree = "<group>"; | ||
475 | + }; | ||
476 | + 1EDBAF012DE8439000911E79 /* ProfileCouponTableViewCell */ = { | ||
477 | + isa = PBXGroup; | ||
478 | + children = ( | ||
479 | + 1EDBAF022DE843CA00911E79 /* ProfileCouponTableViewCell.swift */, | ||
480 | + 1EDBAF032DE843CA00911E79 /* ProfileCouponTableViewCell.xib */, | ||
481 | + ); | ||
482 | + path = ProfileCouponTableViewCell; | ||
483 | + sourceTree = "<group>"; | ||
484 | + }; | ||
485 | + 1EDBAF122DE844C500911E79 /* ProfileFilterCollectionViewCell */ = { | ||
486 | + isa = PBXGroup; | ||
487 | + children = ( | ||
488 | + 1E116F662DE845B1009AE791 /* ProfileFilterCollectionViewCell.swift */, | ||
489 | + 1E116F672DE845B1009AE791 /* ProfileFilterCollectionViewCell.xib */, | ||
490 | + ); | ||
491 | + path = ProfileFilterCollectionViewCell; | ||
492 | + sourceTree = "<group>"; | ||
493 | + }; | ||
421 | 98AD36FA62350CEABCD961A7 /* Frameworks */ = { | 494 | 98AD36FA62350CEABCD961A7 /* Frameworks */ = { |
422 | isa = PBXGroup; | 495 | isa = PBXGroup; |
423 | children = ( | 496 | children = ( |
... | @@ -833,10 +906,14 @@ | ... | @@ -833,10 +906,14 @@ |
833 | 1E917CD62DDF64B2002221D8 /* MyRewardsViewController.xib in Resources */, | 906 | 1E917CD62DDF64B2002221D8 /* MyRewardsViewController.xib in Resources */, |
834 | E6A7790A282933E60045BBA8 /* warp_white_close_button.png in Resources */, | 907 | E6A7790A282933E60045BBA8 /* warp_white_close_button.png in Resources */, |
835 | 1ED41E4D2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib in Resources */, | 908 | 1ED41E4D2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.xib in Resources */, |
909 | + 1EDBAF082DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.xib in Resources */, | ||
910 | + 1EDBAF042DE843CA00911E79 /* ProfileCouponTableViewCell.xib in Resources */, | ||
836 | E6A778F4282933E60045BBA8 /* WLNativeAdCollectionViewCell.xib in Resources */, | 911 | E6A778F4282933E60045BBA8 /* WLNativeAdCollectionViewCell.xib in Resources */, |
837 | E6A778F3282933E60045BBA8 /* WLNativeAdTableViewCell.xib in Resources */, | 912 | E6A778F3282933E60045BBA8 /* WLNativeAdTableViewCell.xib in Resources */, |
913 | + 1EDBAF0C2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.xib in Resources */, | ||
838 | E6A77A38282BC3530045BBA8 /* Media.xcassets in Resources */, | 914 | E6A77A38282BC3530045BBA8 /* Media.xcassets in Resources */, |
839 | E6A77905282933E60045BBA8 /* warp_white_back_button@2x.png in Resources */, | 915 | E6A77905282933E60045BBA8 /* warp_white_back_button@2x.png in Resources */, |
916 | + 1E116F682DE845B1009AE791 /* ProfileFilterCollectionViewCell.xib in Resources */, | ||
840 | 1EB4F4252DE09AAC00D934C0 /* MyRewardsBannerOffersScrollTableViewCell.xib in Resources */, | 917 | 1EB4F4252DE09AAC00D934C0 /* MyRewardsBannerOffersScrollTableViewCell.xib in Resources */, |
841 | 1EA8E5C02DDF427A00CD3418 /* PingLCG-Bold.otf in Resources */, | 918 | 1EA8E5C02DDF427A00CD3418 /* PingLCG-Bold.otf in Resources */, |
842 | 1E64E1832DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib in Resources */, | 919 | 1E64E1832DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib in Resources */, |
... | @@ -844,6 +921,7 @@ | ... | @@ -844,6 +921,7 @@ |
844 | 1EA8E5C22DDF427A00CD3418 /* PingLCG-Regular.otf in Resources */, | 921 | 1EA8E5C22DDF427A00CD3418 /* PingLCG-Regular.otf in Resources */, |
845 | E6A77908282933E60045BBA8 /* warp_white_close_button@2x.png in Resources */, | 922 | E6A77908282933E60045BBA8 /* warp_white_close_button@2x.png in Resources */, |
846 | 1EB4F42B2DE0A0AF00D934C0 /* MyRewardsOffersScrollTableViewCell.xib in Resources */, | 923 | 1EB4F42B2DE0A0AF00D934C0 /* MyRewardsOffersScrollTableViewCell.xib in Resources */, |
924 | + 1EDBAF102DE8443B00911E79 /* ProfileHeaderTableViewCell.xib in Resources */, | ||
847 | 1E917CDB2DDF68C7002221D8 /* CouponViewController.xib in Resources */, | 925 | 1E917CDB2DDF68C7002221D8 /* CouponViewController.xib in Resources */, |
848 | E6A77909282933E60045BBA8 /* warp_white_forward_button@2x.png in Resources */, | 926 | E6A77909282933E60045BBA8 /* warp_white_forward_button@2x.png in Resources */, |
849 | E6A77906282933E60045BBA8 /* warp_white_forward_button.png in Resources */, | 927 | E6A77906282933E60045BBA8 /* warp_white_forward_button.png in Resources */, |
... | @@ -898,6 +976,8 @@ | ... | @@ -898,6 +976,8 @@ |
898 | E6A77900282933E60045BBA8 /* WLInboxItemViewController.m in Sources */, | 976 | E6A77900282933E60045BBA8 /* WLInboxItemViewController.m in Sources */, |
899 | E6A7793E282933E70045BBA8 /* AFHTTPSessionManager.m in Sources */, | 977 | E6A7793E282933E70045BBA8 /* AFHTTPSessionManager.m in Sources */, |
900 | E6A77933282933E70045BBA8 /* UIButton+AFNetworking.m in Sources */, | 978 | E6A77933282933E70045BBA8 /* UIButton+AFNetworking.m in Sources */, |
979 | + 1E116F692DE845B1009AE791 /* ProfileFilterCollectionViewCell.swift in Sources */, | ||
980 | + 1EDBAF0D2DE8441000911E79 /* ProfileQuestionnaireTableViewCell.swift in Sources */, | ||
901 | E6A77919282933E60045BBA8 /* Warply.m in Sources */, | 981 | E6A77919282933E60045BBA8 /* Warply.m in Sources */, |
902 | E6A7794B282933E70045BBA8 /* FMDatabase.m in Sources */, | 982 | E6A7794B282933E70045BBA8 /* FMDatabase.m in Sources */, |
903 | E6A778EC282933E60045BBA8 /* WLNativeVideoTableViewCell.m in Sources */, | 983 | E6A778EC282933E60045BBA8 /* WLNativeVideoTableViewCell.m in Sources */, |
... | @@ -917,8 +997,10 @@ | ... | @@ -917,8 +997,10 @@ |
917 | E6A77917282933E60045BBA8 /* UIViewController+WLAdditions.m in Sources */, | 997 | E6A77917282933E60045BBA8 /* UIViewController+WLAdditions.m in Sources */, |
918 | E6A77943282933E70045BBA8 /* AFNetworkReachabilityManager.m in Sources */, | 998 | E6A77943282933E70045BBA8 /* AFNetworkReachabilityManager.m in Sources */, |
919 | E6A778F1282933E60045BBA8 /* WLNativeAdTableViewCell.m in Sources */, | 999 | E6A778F1282933E60045BBA8 /* WLNativeAdTableViewCell.m in Sources */, |
1000 | + 1E116F6B2DE86CBA009AE791 /* Models.swift in Sources */, | ||
920 | E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */, | 1001 | E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */, |
921 | E6A77938282933E70045BBA8 /* AFImageDownloader.m in Sources */, | 1002 | E6A77938282933E70045BBA8 /* AFImageDownloader.m in Sources */, |
1003 | + 1EDBAF092DE843FB00911E79 /* ProfileCouponFiltersTableViewCell.swift in Sources */, | ||
922 | E6A778ED282933E60045BBA8 /* WLCustomNativeCollectionViewCell.m in Sources */, | 1004 | E6A778ED282933E60045BBA8 /* WLCustomNativeCollectionViewCell.m in Sources */, |
923 | E6A7790D282933E60045BBA8 /* WLLocationManager.m in Sources */, | 1005 | E6A7790D282933E60045BBA8 /* WLLocationManager.m in Sources */, |
924 | E6A7793D282933E70045BBA8 /* AFURLResponseSerialization.m in Sources */, | 1006 | E6A7793D282933E70045BBA8 /* AFURLResponseSerialization.m in Sources */, |
... | @@ -932,6 +1014,8 @@ | ... | @@ -932,6 +1014,8 @@ |
932 | 1E4C4CFB2DE6014500279AAD /* CopyableLabel.swift in Sources */, | 1014 | 1E4C4CFB2DE6014500279AAD /* CopyableLabel.swift in Sources */, |
933 | E6A77947282933E70045BBA8 /* FMDatabaseQueue.m in Sources */, | 1015 | E6A77947282933E70045BBA8 /* FMDatabaseQueue.m in Sources */, |
934 | E6A77922282933E60045BBA8 /* NSData+SSToolkitAdditions.m in Sources */, | 1016 | E6A77922282933E60045BBA8 /* NSData+SSToolkitAdditions.m in Sources */, |
1017 | + 1EDBAF112DE8443B00911E79 /* ProfileHeaderTableViewCell.swift in Sources */, | ||
1018 | + 1EDBAF052DE843CA00911E79 /* ProfileCouponTableViewCell.swift in Sources */, | ||
935 | E6A7794A282933E70045BBA8 /* FMDatabaseAdditions.m in Sources */, | 1019 | E6A7794A282933E70045BBA8 /* FMDatabaseAdditions.m in Sources */, |
936 | E6A77903282933E60045BBA8 /* WLAPSItem.m in Sources */, | 1020 | E6A77903282933E60045BBA8 /* WLAPSItem.m in Sources */, |
937 | E6A7790B282933E60045BBA8 /* WLPushManager.m in Sources */, | 1021 | E6A7790B282933E60045BBA8 /* WLPushManager.m in Sources */, | ... | ... |
... | @@ -7,7 +7,7 @@ | ... | @@ -7,7 +7,7 @@ |
7 | <key>SwiftWarplyFramework.xcscheme_^#shared#^_</key> | 7 | <key>SwiftWarplyFramework.xcscheme_^#shared#^_</key> |
8 | <dict> | 8 | <dict> |
9 | <key>orderHint</key> | 9 | <key>orderHint</key> |
10 | - <integer>1</integer> | 10 | + <integer>0</integer> |
11 | </dict> | 11 | </dict> |
12 | </dict> | 12 | </dict> |
13 | </dict> | 13 | </dict> | ... | ... |
No preview for this file type

214 KB

214 KB

214 KB
1 | { | 1 | { |
2 | "images" : [ | 2 | "images" : [ |
3 | { | 3 | { |
4 | - "filename" : "contest_banner_5.png", | 4 | + "filename" : "questionnaire_banner.png", |
5 | "idiom" : "universal", | 5 | "idiom" : "universal", |
6 | "scale" : "1x" | 6 | "scale" : "1x" |
7 | }, | 7 | }, |
8 | { | 8 | { |
9 | - "filename" : "contest_banner_5 1.png", | 9 | + "filename" : "questionnaire_banner 1.png", |
10 | "idiom" : "universal", | 10 | "idiom" : "universal", |
11 | "scale" : "2x" | 11 | "scale" : "2x" |
12 | }, | 12 | }, |
13 | { | 13 | { |
14 | - "filename" : "contest_banner_5 2.png", | 14 | + "filename" : "questionnaire_banner 2.png", |
15 | "idiom" : "universal", | 15 | "idiom" : "universal", |
16 | "scale" : "3x" | 16 | "scale" : "3x" |
17 | } | 17 | } | ... | ... |

78.4 KB

78.4 KB

78.4 KB
... | @@ -8,7 +8,8 @@ | ... | @@ -8,7 +8,8 @@ |
8 | import UIKit | 8 | import UIKit |
9 | 9 | ||
10 | protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject { | 10 | protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject { |
11 | - func didSelectBannerOffer(_ offer: OfferModel) | 11 | + func didSelectBannerOffer(_ index: Int) |
12 | + func didTapProfileButton() | ||
12 | } | 13 | } |
13 | 14 | ||
14 | @objc public class MyRewardsBannerOffersScrollTableViewCell: UITableViewCell { | 15 | @objc public class MyRewardsBannerOffersScrollTableViewCell: UITableViewCell { |
... | @@ -17,6 +18,7 @@ protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject { | ... | @@ -17,6 +18,7 @@ protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject { |
17 | @IBOutlet weak var tagView2: UIView! | 18 | @IBOutlet weak var tagView2: UIView! |
18 | @IBOutlet weak var tagLabel2: UILabel! | 19 | @IBOutlet weak var tagLabel2: UILabel! |
19 | @IBOutlet weak var profileImage: UIImageView! | 20 | @IBOutlet weak var profileImage: UIImageView! |
21 | + @IBOutlet weak var profileButton: UIButton! | ||
20 | @IBOutlet weak var collectionView: UICollectionView! | 22 | @IBOutlet weak var collectionView: UICollectionView! |
21 | @IBOutlet weak var pageControl: UIPageControl! | 23 | @IBOutlet weak var pageControl: UIPageControl! |
22 | 24 | ||
... | @@ -29,6 +31,8 @@ protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject { | ... | @@ -29,6 +31,8 @@ protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject { |
29 | 31 | ||
30 | profileImage.image = UIImage(named: "profile_pic_default", in: MyEmptyClass.resourceBundle(), compatibleWith: nil) | 32 | profileImage.image = UIImage(named: "profile_pic_default", in: MyEmptyClass.resourceBundle(), compatibleWith: nil) |
31 | 33 | ||
34 | + profileButton.addTarget(self, action: #selector(profileButtonTapped), for: .touchUpInside) | ||
35 | + | ||
32 | tagView1.backgroundColor = UIColor(rgb: 0x09914E) | 36 | tagView1.backgroundColor = UIColor(rgb: 0x09914E) |
33 | tagView1.layer.cornerRadius = 4.0 | 37 | tagView1.layer.cornerRadius = 4.0 |
34 | tagLabel1.font = UIFont(name: "PingLCG-Regular", size: 17) | 38 | tagLabel1.font = UIFont(name: "PingLCG-Regular", size: 17) |
... | @@ -95,6 +99,10 @@ protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject { | ... | @@ -95,6 +99,10 @@ protocol MyRewardsBannerOffersScrollTableViewCellDelegate: AnyObject { |
95 | 99 | ||
96 | self.collectionView.reloadData(); | 100 | self.collectionView.reloadData(); |
97 | } | 101 | } |
102 | + | ||
103 | + @objc private func profileButtonTapped() { | ||
104 | + delegate?.didTapProfileButton() | ||
105 | + } | ||
98 | } | 106 | } |
99 | 107 | ||
100 | extension MyRewardsBannerOffersScrollTableViewCell: UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UIScrollViewDelegate { | 108 | extension MyRewardsBannerOffersScrollTableViewCell: UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UIScrollViewDelegate { |
... | @@ -121,7 +129,7 @@ extension MyRewardsBannerOffersScrollTableViewCell: UICollectionViewDataSource, | ... | @@ -121,7 +129,7 @@ extension MyRewardsBannerOffersScrollTableViewCell: UICollectionViewDataSource, |
121 | // Get the selected offer | 129 | // Get the selected offer |
122 | if let offer = self.data?.offers[indexPath.row] { | 130 | if let offer = self.data?.offers[indexPath.row] { |
123 | // Call the delegate method to notify the parent | 131 | // Call the delegate method to notify the parent |
124 | - delegate?.didSelectBannerOffer(offer) | 132 | + delegate?.didSelectBannerOffer(indexPath.row) |
125 | } | 133 | } |
126 | } | 134 | } |
127 | 135 | ... | ... |
... | @@ -12,18 +12,18 @@ | ... | @@ -12,18 +12,18 @@ |
12 | <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="MyRewardsBannerOffersScrollTableViewCell" rowHeight="349" id="KGk-i7-Jjw" customClass="MyRewardsBannerOffersScrollTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target"> | 12 | <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="MyRewardsBannerOffersScrollTableViewCell" rowHeight="349" id="KGk-i7-Jjw" customClass="MyRewardsBannerOffersScrollTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target"> |
13 | <rect key="frame" x="0.0" y="0.0" width="413" height="349"/> | 13 | <rect key="frame" x="0.0" y="0.0" width="413" height="349"/> |
14 | <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | 14 | <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> |
15 | - <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" ambiguous="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> | 15 | + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> |
16 | <rect key="frame" x="0.0" y="0.0" width="413" height="349"/> | 16 | <rect key="frame" x="0.0" y="0.0" width="413" height="349"/> |
17 | <autoresizingMask key="autoresizingMask"/> | 17 | <autoresizingMask key="autoresizingMask"/> |
18 | <subviews> | 18 | <subviews> |
19 | - <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VzF-dQ-3Wa" userLabel="Parent View"> | 19 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="VzF-dQ-3Wa" userLabel="Parent View"> |
20 | - <rect key="frame" x="0.0" y="0.0" width="413" height="298"/> | 20 | + <rect key="frame" x="0.0" y="0.0" width="413" height="450"/> |
21 | <subviews> | 21 | <subviews> |
22 | - <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="JTs-J5-DO2" userLabel="Top View"> | 22 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JTs-J5-DO2" userLabel="Top View"> |
23 | - <rect key="frame" x="24" y="36" width="365" height="43"/> | 23 | + <rect key="frame" x="24" y="36" width="365" height="35"/> |
24 | <subviews> | 24 | <subviews> |
25 | - <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="h09-MS-XKy"> | 25 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="h09-MS-XKy"> |
26 | - <rect key="frame" x="0.0" y="8.6666666666666643" width="58" height="26"/> | 26 | + <rect key="frame" x="0.0" y="4.6666666666666643" width="58" height="26"/> |
27 | <subviews> | 27 | <subviews> |
28 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Green" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4m7-JY-MDY"> | 28 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Green" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4m7-JY-MDY"> |
29 | <rect key="frame" x="6" y="3" width="46" height="20"/> | 29 | <rect key="frame" x="6" y="3" width="46" height="20"/> |
... | @@ -41,8 +41,8 @@ | ... | @@ -41,8 +41,8 @@ |
41 | <constraint firstItem="4m7-JY-MDY" firstAttribute="top" secondItem="h09-MS-XKy" secondAttribute="top" constant="3" id="tui-5x-ntO"/> | 41 | <constraint firstItem="4m7-JY-MDY" firstAttribute="top" secondItem="h09-MS-XKy" secondAttribute="top" constant="3" id="tui-5x-ntO"/> |
42 | </constraints> | 42 | </constraints> |
43 | </view> | 43 | </view> |
44 | - <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="H5g-xq-68p"> | 44 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="H5g-xq-68p"> |
45 | - <rect key="frame" x="66" y="8.6666666666666643" width="61.666666666666657" height="26"/> | 45 | + <rect key="frame" x="66" y="4.6666666666666643" width="61.666666666666657" height="26"/> |
46 | <subviews> | 46 | <subviews> |
47 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Family" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WN9-wM-hV8"> | 47 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Family" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WN9-wM-hV8"> |
48 | <rect key="frame" x="6" y="3" width="49.666666666666664" height="20"/> | 48 | <rect key="frame" x="6" y="3" width="49.666666666666664" height="20"/> |
... | @@ -60,8 +60,8 @@ | ... | @@ -60,8 +60,8 @@ |
60 | <constraint firstItem="WN9-wM-hV8" firstAttribute="top" secondItem="H5g-xq-68p" secondAttribute="top" constant="3" id="pwW-Ed-yv2"/> | 60 | <constraint firstItem="WN9-wM-hV8" firstAttribute="top" secondItem="H5g-xq-68p" secondAttribute="top" constant="3" id="pwW-Ed-yv2"/> |
61 | </constraints> | 61 | </constraints> |
62 | </view> | 62 | </view> |
63 | - <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5cf-tr-Vjf"> | 63 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5cf-tr-Vjf"> |
64 | - <rect key="frame" x="322" y="0.0" width="43" height="43"/> | 64 | + <rect key="frame" x="322" y="0.0" width="43" height="35"/> |
65 | <subviews> | 65 | <subviews> |
66 | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="fZO-NB-UyL"> | 66 | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="fZO-NB-UyL"> |
67 | <rect key="frame" x="0.0" y="0.0" width="43" height="43"/> | 67 | <rect key="frame" x="0.0" y="0.0" width="43" height="43"/> |
... | @@ -71,13 +71,25 @@ | ... | @@ -71,13 +71,25 @@ |
71 | <constraint firstAttribute="height" constant="43" id="lZJ-VG-4fl"/> | 71 | <constraint firstAttribute="height" constant="43" id="lZJ-VG-4fl"/> |
72 | </constraints> | 72 | </constraints> |
73 | </imageView> | 73 | </imageView> |
74 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="loI-CB-MX1" userLabel="ProfileButton"> | ||
75 | + <rect key="frame" x="0.0" y="0.0" width="43" height="35"/> | ||
76 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
77 | + <state key="normal" title="Button"/> | ||
78 | + <buttonConfiguration key="configuration" style="plain" title="Button"> | ||
79 | + <color key="baseForegroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
80 | + </buttonConfiguration> | ||
81 | + </button> | ||
74 | </subviews> | 82 | </subviews> |
75 | <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | 83 | <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
76 | <constraints> | 84 | <constraints> |
85 | + <constraint firstAttribute="trailing" secondItem="loI-CB-MX1" secondAttribute="trailing" id="0PQ-cq-sCt"/> | ||
77 | <constraint firstItem="fZO-NB-UyL" firstAttribute="leading" secondItem="5cf-tr-Vjf" secondAttribute="leading" id="Bfw-5S-wqz"/> | 86 | <constraint firstItem="fZO-NB-UyL" firstAttribute="leading" secondItem="5cf-tr-Vjf" secondAttribute="leading" id="Bfw-5S-wqz"/> |
78 | <constraint firstItem="fZO-NB-UyL" firstAttribute="top" secondItem="5cf-tr-Vjf" secondAttribute="top" id="WCt-TJ-XQc"/> | 87 | <constraint firstItem="fZO-NB-UyL" firstAttribute="top" secondItem="5cf-tr-Vjf" secondAttribute="top" id="WCt-TJ-XQc"/> |
88 | + <constraint firstItem="loI-CB-MX1" firstAttribute="top" secondItem="5cf-tr-Vjf" secondAttribute="top" id="XKb-DI-owX"/> | ||
79 | <constraint firstAttribute="trailing" secondItem="fZO-NB-UyL" secondAttribute="trailing" id="Z0D-wE-fgE"/> | 89 | <constraint firstAttribute="trailing" secondItem="fZO-NB-UyL" secondAttribute="trailing" id="Z0D-wE-fgE"/> |
90 | + <constraint firstItem="loI-CB-MX1" firstAttribute="leading" secondItem="5cf-tr-Vjf" secondAttribute="leading" id="fM6-dS-psa"/> | ||
80 | <constraint firstAttribute="bottom" secondItem="fZO-NB-UyL" secondAttribute="bottom" id="nuy-88-N5B"/> | 91 | <constraint firstAttribute="bottom" secondItem="fZO-NB-UyL" secondAttribute="bottom" id="nuy-88-N5B"/> |
92 | + <constraint firstAttribute="bottom" secondItem="loI-CB-MX1" secondAttribute="bottom" id="rMQ-Ec-OZs"/> | ||
81 | </constraints> | 93 | </constraints> |
82 | </view> | 94 | </view> |
83 | </subviews> | 95 | </subviews> |
... | @@ -93,8 +105,8 @@ | ... | @@ -93,8 +105,8 @@ |
93 | <constraint firstItem="H5g-xq-68p" firstAttribute="leading" secondItem="h09-MS-XKy" secondAttribute="trailing" constant="8" id="wqx-Hc-3YH"/> | 105 | <constraint firstItem="H5g-xq-68p" firstAttribute="leading" secondItem="h09-MS-XKy" secondAttribute="trailing" constant="8" id="wqx-Hc-3YH"/> |
94 | </constraints> | 106 | </constraints> |
95 | </view> | 107 | </view> |
96 | - <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" ambiguous="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="I7z-Fz-SNP"> | 108 | + <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="I7z-Fz-SNP"> |
97 | - <rect key="frame" x="0.0" y="149" width="413" height="0.0"/> | 109 | + <rect key="frame" x="0.0" y="76" width="413" height="348"/> |
98 | <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | 110 | <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
99 | <constraints> | 111 | <constraints> |
100 | <constraint firstAttribute="height" constant="348" id="aEf-Xl-A2C"/> | 112 | <constraint firstAttribute="height" constant="348" id="aEf-Xl-A2C"/> |
... | @@ -111,8 +123,8 @@ | ... | @@ -111,8 +123,8 @@ |
111 | <outlet property="delegate" destination="KGk-i7-Jjw" id="fQ4-0u-38c"/> | 123 | <outlet property="delegate" destination="KGk-i7-Jjw" id="fQ4-0u-38c"/> |
112 | </connections> | 124 | </connections> |
113 | </collectionView> | 125 | </collectionView> |
114 | - <pageControl opaque="NO" contentMode="scaleToFill" ambiguous="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" numberOfPages="3" translatesAutoresizingMaskIntoConstraints="NO" id="lOm-CZ-dVG"> | 126 | + <pageControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" numberOfPages="3" translatesAutoresizingMaskIntoConstraints="NO" id="lOm-CZ-dVG"> |
115 | - <rect key="frame" x="170" y="136" width="73" height="26"/> | 127 | + <rect key="frame" x="170" y="424" width="73" height="26"/> |
116 | </pageControl> | 128 | </pageControl> |
117 | </subviews> | 129 | </subviews> |
118 | <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | 130 | <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
... | @@ -142,6 +154,7 @@ | ... | @@ -142,6 +154,7 @@ |
142 | <connections> | 154 | <connections> |
143 | <outlet property="collectionView" destination="I7z-Fz-SNP" id="yrF-mR-aQu"/> | 155 | <outlet property="collectionView" destination="I7z-Fz-SNP" id="yrF-mR-aQu"/> |
144 | <outlet property="pageControl" destination="lOm-CZ-dVG" id="Skf-hV-rjH"/> | 156 | <outlet property="pageControl" destination="lOm-CZ-dVG" id="Skf-hV-rjH"/> |
157 | + <outlet property="profileButton" destination="loI-CB-MX1" id="VTG-C3-3KA"/> | ||
145 | <outlet property="profileImage" destination="fZO-NB-UyL" id="l05-qG-DJv"/> | 158 | <outlet property="profileImage" destination="fZO-NB-UyL" id="l05-qG-DJv"/> |
146 | <outlet property="tagLabel1" destination="4m7-JY-MDY" id="Min-YW-AN2"/> | 159 | <outlet property="tagLabel1" destination="4m7-JY-MDY" id="Min-YW-AN2"/> |
147 | <outlet property="tagLabel2" destination="WN9-wM-hV8" id="yWk-1S-4Zk"/> | 160 | <outlet property="tagLabel2" destination="WN9-wM-hV8" id="yWk-1S-4Zk"/> | ... | ... |
1 | +// | ||
2 | +// ProfileCouponFiltersTableViewCell.swift | ||
3 | +// SwiftWarplyFramework | ||
4 | +// | ||
5 | +// Created by Manos Chorianopoulos on 29/5/25. | ||
6 | +// | ||
7 | + | ||
8 | +import UIKit | ||
9 | + | ||
10 | +protocol ProfileCouponFiltersTableViewCellDelegate: AnyObject { | ||
11 | + func didSelectFilter(_ filter: CouponFilterModel) | ||
12 | +} | ||
13 | + | ||
14 | +@objc public class ProfileCouponFiltersTableViewCell: UITableViewCell { | ||
15 | + @IBOutlet weak var titleLabel: UILabel! | ||
16 | + @IBOutlet weak var collectionView: UICollectionView! | ||
17 | + | ||
18 | + weak var delegate: ProfileCouponFiltersTableViewCellDelegate? | ||
19 | + var data: [CouponFilterModel]? | ||
20 | + | ||
21 | + public override func awakeFromNib() { | ||
22 | + super.awakeFromNib() | ||
23 | + | ||
24 | + titleLabel.font = UIFont(name: "PingLCG-Bold", size: 18) | ||
25 | + titleLabel.textColor = UIColor(rgb: 0x000F1E) | ||
26 | + | ||
27 | + // Register XIBs for collection view cells | ||
28 | + collectionView.register(UINib(nibName: "ProfileFilterCollectionViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellWithReuseIdentifier: "ProfileFilterCollectionViewCell") | ||
29 | + | ||
30 | + // Fix background colors | ||
31 | +// collectionView.backgroundColor = UIColor.clear | ||
32 | +// self.backgroundColor = UIColor.clear | ||
33 | +// self.contentView.backgroundColor = UIColor.clear | ||
34 | + | ||
35 | + // Remove content insets and gaps | ||
36 | + collectionView.contentInset = UIEdgeInsets.zero | ||
37 | + collectionView.scrollIndicatorInsets = UIEdgeInsets.zero | ||
38 | + | ||
39 | + if #available(iOS 11.0, *) { | ||
40 | + collectionView.contentInsetAdjustmentBehavior = .never | ||
41 | + } | ||
42 | + | ||
43 | + // Configure collection view layout | ||
44 | + if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout { | ||
45 | + layout.scrollDirection = .horizontal | ||
46 | + layout.minimumLineSpacing = 15 | ||
47 | + layout.minimumInteritemSpacing = 0 | ||
48 | + layout.sectionInset = UIEdgeInsets(top: 0, left: 24, bottom: 0, right: 24) | ||
49 | + } | ||
50 | + | ||
51 | + // Enable paging for smooth banner scrolling | ||
52 | + // collectionView.isPagingEnabled = true | ||
53 | + collectionView.showsHorizontalScrollIndicator = false | ||
54 | + | ||
55 | + // Set delegates | ||
56 | + collectionView.delegate = self | ||
57 | + collectionView.dataSource = self | ||
58 | + | ||
59 | + } | ||
60 | + | ||
61 | + public override func setSelected(_ selected: Bool, animated: Bool) { | ||
62 | + super.setSelected(selected, animated: animated) | ||
63 | + | ||
64 | + // Configure the view for the selected state | ||
65 | + } | ||
66 | + | ||
67 | + func configureCell(data: [CouponFilterModel]?) { | ||
68 | + self.data = data | ||
69 | + | ||
70 | + self.collectionView.reloadData(); | ||
71 | + } | ||
72 | +} | ||
73 | + | ||
74 | +extension ProfileCouponFiltersTableViewCell: UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout { | ||
75 | + | ||
76 | + | ||
77 | + public func numberOfSections(in collectionView: UICollectionView) -> Int { | ||
78 | + return 1 | ||
79 | + } | ||
80 | + | ||
81 | + public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { | ||
82 | + return self.data?.count ?? 0 | ||
83 | + } | ||
84 | + | ||
85 | + public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | ||
86 | + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ProfileFilterCollectionViewCell", for: indexPath) as! ProfileFilterCollectionViewCell | ||
87 | + if let filter = self.data?[indexPath.row] { | ||
88 | + // TODO: Fix dynamic | ||
89 | + let isSelected = self.data?[indexPath.row].title == "Ενεργά" | ||
90 | + cell.configureCell(data: filter, isSelected: isSelected) | ||
91 | + } | ||
92 | + return cell; | ||
93 | + } | ||
94 | + | ||
95 | + public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { | ||
96 | + if let filter = self.data?[indexPath.row] { | ||
97 | + delegate?.didSelectFilter(filter) | ||
98 | + } | ||
99 | + } | ||
100 | + | ||
101 | + // MARK: - UICollectionViewDelegateFlowLayout | ||
102 | +// public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { | ||
103 | +// if self.data?.title == "Αγαπημένα" { | ||
104 | +// return CGSize(width: 275, height: 350) | ||
105 | +// } else { | ||
106 | +// return CGSize(width: 257, height: 232) | ||
107 | +// } | ||
108 | +// } | ||
109 | + | ||
110 | + // Distance Between Item Cells | ||
111 | + public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { | ||
112 | + return 15 | ||
113 | + } | ||
114 | + | ||
115 | + public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { | ||
116 | + return 0 | ||
117 | + } | ||
118 | + | ||
119 | + // Cell Margin | ||
120 | + public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { | ||
121 | + return UIEdgeInsets(top: 0, left: 24, bottom: 0, right: 24) | ||
122 | + } | ||
123 | +} |
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> | ||
3 | + <device id="retina6_12" orientation="portrait" appearance="light"/> | ||
4 | + <dependencies> | ||
5 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/> | ||
6 | + <capability name="Safe area layout guides" minToolsVersion="9.0"/> | ||
7 | + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||
8 | + </dependencies> | ||
9 | + <objects> | ||
10 | + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> | ||
11 | + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> | ||
12 | + <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="ProfileCouponFiltersTableViewCell" rowHeight="161" id="KGk-i7-Jjw" customClass="ProfileCouponFiltersTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target"> | ||
13 | + <rect key="frame" x="0.0" y="0.0" width="320" height="161"/> | ||
14 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | ||
15 | + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> | ||
16 | + <rect key="frame" x="0.0" y="0.0" width="320" height="161"/> | ||
17 | + <autoresizingMask key="autoresizingMask"/> | ||
18 | + <subviews> | ||
19 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1kR-zd-duR" userLabel="ParentView"> | ||
20 | + <rect key="frame" x="0.0" y="0.0" width="320" height="161"/> | ||
21 | + <subviews> | ||
22 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mga-ND-qoh"> | ||
23 | + <rect key="frame" x="24" y="26" width="272" height="49"/> | ||
24 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
25 | + <nil key="textColor"/> | ||
26 | + <nil key="highlightedColor"/> | ||
27 | + </label> | ||
28 | + <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="Ddn-dN-xH1"> | ||
29 | + <rect key="frame" x="0.0" y="118" width="320" height="43"/> | ||
30 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
31 | + <constraints> | ||
32 | + <constraint firstAttribute="height" constant="43" id="5nG-1p-kic"/> | ||
33 | + </constraints> | ||
34 | + <collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" automaticEstimatedItemSize="YES" minimumLineSpacing="5" minimumInteritemSpacing="5" id="tAC-pV-kZ6"> | ||
35 | + <size key="itemSize" width="128" height="120"/> | ||
36 | + <size key="headerReferenceSize" width="0.0" height="0.0"/> | ||
37 | + <size key="footerReferenceSize" width="0.0" height="0.0"/> | ||
38 | + <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> | ||
39 | + </collectionViewFlowLayout> | ||
40 | + <cells/> | ||
41 | + <connections> | ||
42 | + <outlet property="dataSource" destination="KGk-i7-Jjw" id="J6c-fu-dH8"/> | ||
43 | + <outlet property="delegate" destination="KGk-i7-Jjw" id="D3M-nO-3sC"/> | ||
44 | + </connections> | ||
45 | + </collectionView> | ||
46 | + </subviews> | ||
47 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
48 | + <constraints> | ||
49 | + <constraint firstItem="Ddn-dN-xH1" firstAttribute="top" secondItem="mga-ND-qoh" secondAttribute="bottom" constant="43" id="1gh-45-u6h"/> | ||
50 | + <constraint firstItem="Ddn-dN-xH1" firstAttribute="leading" secondItem="1kR-zd-duR" secondAttribute="leading" id="3IU-v8-7cI"/> | ||
51 | + <constraint firstItem="mga-ND-qoh" firstAttribute="top" secondItem="1kR-zd-duR" secondAttribute="top" constant="26" id="J0I-v0-uwq"/> | ||
52 | + <constraint firstAttribute="trailing" secondItem="mga-ND-qoh" secondAttribute="trailing" constant="24" id="Ss1-zq-znd"/> | ||
53 | + <constraint firstAttribute="bottom" secondItem="Ddn-dN-xH1" secondAttribute="bottom" id="VdN-By-srg"/> | ||
54 | + <constraint firstAttribute="trailing" secondItem="Ddn-dN-xH1" secondAttribute="trailing" id="W06-Yi-lzm"/> | ||
55 | + <constraint firstItem="mga-ND-qoh" firstAttribute="leading" secondItem="1kR-zd-duR" secondAttribute="leading" constant="24" id="sEy-GV-Pjr"/> | ||
56 | + </constraints> | ||
57 | + </view> | ||
58 | + </subviews> | ||
59 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
60 | + <constraints> | ||
61 | + <constraint firstItem="1kR-zd-duR" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="BHT-r3-dcg"/> | ||
62 | + <constraint firstAttribute="trailing" secondItem="1kR-zd-duR" secondAttribute="trailing" id="eLa-yc-CeZ"/> | ||
63 | + <constraint firstAttribute="bottom" secondItem="1kR-zd-duR" secondAttribute="bottom" id="rie-jS-xMj"/> | ||
64 | + <constraint firstItem="1kR-zd-duR" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="vgK-SU-fRu"/> | ||
65 | + </constraints> | ||
66 | + </tableViewCellContentView> | ||
67 | + <viewLayoutGuide key="safeArea" id="njF-e1-oar"/> | ||
68 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
69 | + <connections> | ||
70 | + <outlet property="collectionView" destination="Ddn-dN-xH1" id="RzU-o5-6Dw"/> | ||
71 | + <outlet property="titleLabel" destination="mga-ND-qoh" id="TxL-cQ-O1P"/> | ||
72 | + </connections> | ||
73 | + <point key="canvasLocation" x="68.702290076335871" y="29.929577464788736"/> | ||
74 | + </tableViewCell> | ||
75 | + </objects> | ||
76 | +</document> |
1 | +// | ||
2 | +// ProfileCouponTableViewCell.swift | ||
3 | +// SwiftWarplyFramework | ||
4 | +// | ||
5 | +// Created by Manos Chorianopoulos on 29/5/25. | ||
6 | +// | ||
7 | + | ||
8 | +import UIKit | ||
9 | + | ||
10 | +@objc public class ProfileCouponTableViewCell: UITableViewCell { | ||
11 | + @IBOutlet weak var parentView: UIView! | ||
12 | + @IBOutlet weak var bannerImage: UIImageView! | ||
13 | + @IBOutlet weak var favoriteImage: UIImageView! | ||
14 | + @IBOutlet weak var discountView: UIView! | ||
15 | + @IBOutlet weak var discountLabel: UILabel! | ||
16 | + @IBOutlet weak var titleLabel: UILabel! | ||
17 | + @IBOutlet weak var subtitleLabel: UILabel! | ||
18 | + @IBOutlet weak var expirationLabel: UILabel! | ||
19 | + @IBOutlet weak var logoImage: UIImageView! | ||
20 | + | ||
21 | + public override func awakeFromNib() { | ||
22 | + super.awakeFromNib() | ||
23 | + // Initialization code | ||
24 | + | ||
25 | + parentView.layer.borderWidth = 1.0 | ||
26 | + parentView.layer.borderColor = UIColor(rgb: 0xCCCCCC).cgColor | ||
27 | + parentView.layer.cornerRadius = 8.0 | ||
28 | + parentView.clipsToBounds = true | ||
29 | + | ||
30 | + discountView.layer.cornerRadius = 34.0 | ||
31 | + | ||
32 | + } | ||
33 | + | ||
34 | + func configureCell(data: OfferModel) { | ||
35 | + bannerImage.image = UIImage(named: data.bannerImage, in: MyEmptyClass.resourceBundle(), compatibleWith: nil) | ||
36 | + favoriteImage.image = UIImage(named: data.isFavorite ? "favorite_filled" : "favorite_empty", in: MyEmptyClass.resourceBundle(), compatibleWith: nil) | ||
37 | + | ||
38 | + let discountSymbol = | ||
39 | + data.discountType == "percentage" ? "%" | ||
40 | + : data.discountType == "price" ? "€" | ||
41 | + : data.discountType == "buyOneGetOne" ? "1+1" | ||
42 | + : data.discountType == "free" ? "Δωρεάν" | ||
43 | + : "" | ||
44 | + | ||
45 | +// discountLabel.text = "\(data.discount)\(discountSymbol)" | ||
46 | + discountLabel.text = data.discount | ||
47 | + discountLabel.font = UIFont(name: "PingLCG-Bold", size: 25) | ||
48 | + discountLabel.textColor = UIColor(rgb: 0xF2F2F2) | ||
49 | + | ||
50 | + discountView.backgroundColor = UIColor(rgb: data.color) | ||
51 | + | ||
52 | + titleLabel.text = data.title | ||
53 | + titleLabel.font = UIFont(name: "PingLCG-Bold", size: 22) | ||
54 | + titleLabel.textColor = UIColor(rgb: 0x000F1E) | ||
55 | + | ||
56 | + subtitleLabel.text = data.description | ||
57 | + subtitleLabel.font = UIFont(name: "PingLCG-Regular", size: 16) | ||
58 | + subtitleLabel.textColor = UIColor(rgb: 0x00111B) | ||
59 | + | ||
60 | + expirationLabel.text = data.expirationDate | ||
61 | + expirationLabel.font = UIFont(name: "PingLCG-Regular", size: 13) | ||
62 | + expirationLabel.textColor = UIColor(rgb: 0x00111B) | ||
63 | + | ||
64 | + logoImage.image = UIImage(named: data.merchantLogo, in: MyEmptyClass.resourceBundle(), compatibleWith: nil) | ||
65 | + } | ||
66 | + | ||
67 | + public override func setSelected(_ selected: Bool, animated: Bool) { | ||
68 | + super.setSelected(selected, animated: animated) | ||
69 | + | ||
70 | + // Configure the view for the selected state | ||
71 | + } | ||
72 | + | ||
73 | +} |
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> | ||
3 | + <device id="retina6_12" orientation="portrait" appearance="light"/> | ||
4 | + <dependencies> | ||
5 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/> | ||
6 | + <capability name="Safe area layout guides" minToolsVersion="9.0"/> | ||
7 | + <capability name="System colors in document resources" minToolsVersion="11.0"/> | ||
8 | + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||
9 | + </dependencies> | ||
10 | + <objects> | ||
11 | + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> | ||
12 | + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> | ||
13 | + <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="ProfileCouponTableViewCell" rowHeight="296" id="KGk-i7-Jjw" customClass="ProfileCouponTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target"> | ||
14 | + <rect key="frame" x="0.0" y="0.0" width="320" height="296"/> | ||
15 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | ||
16 | + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" ambiguous="YES" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> | ||
17 | + <rect key="frame" x="0.0" y="0.0" width="320" height="296"/> | ||
18 | + <autoresizingMask key="autoresizingMask"/> | ||
19 | + <subviews> | ||
20 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="x0X-za-HZ9" userLabel="Parent View"> | ||
21 | + <rect key="frame" x="22" y="0.0" width="276" height="292"/> | ||
22 | + <subviews> | ||
23 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8Ht-7Z-jiW" userLabel="Top View"> | ||
24 | + <rect key="frame" x="0.0" y="0.0" width="276" height="171"/> | ||
25 | + <subviews> | ||
26 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="09g-Nj-HG4"> | ||
27 | + <rect key="frame" x="0.0" y="0.0" width="276" height="171"/> | ||
28 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
29 | + </imageView> | ||
30 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4xy-g8-Ukx" userLabel="Fav View"> | ||
31 | + <rect key="frame" x="16" y="13" width="46" height="46"/> | ||
32 | + <subviews> | ||
33 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="T91-Ra-dmT"> | ||
34 | + <rect key="frame" x="0.0" y="0.0" width="46" height="46"/> | ||
35 | + </imageView> | ||
36 | + </subviews> | ||
37 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
38 | + <constraints> | ||
39 | + <constraint firstAttribute="width" constant="46" id="Cc2-q8-pqb"/> | ||
40 | + <constraint firstAttribute="trailing" secondItem="T91-Ra-dmT" secondAttribute="trailing" id="FHe-DH-ghP"/> | ||
41 | + <constraint firstItem="T91-Ra-dmT" firstAttribute="top" secondItem="4xy-g8-Ukx" secondAttribute="top" id="HMT-10-TaU"/> | ||
42 | + <constraint firstAttribute="bottom" secondItem="T91-Ra-dmT" secondAttribute="bottom" id="K7M-Vf-uo8"/> | ||
43 | + <constraint firstItem="T91-Ra-dmT" firstAttribute="leading" secondItem="4xy-g8-Ukx" secondAttribute="leading" id="diD-2x-xIG"/> | ||
44 | + <constraint firstAttribute="height" constant="46" id="gtM-XV-LnS"/> | ||
45 | + </constraints> | ||
46 | + </view> | ||
47 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dnZ-fa-M3o" userLabel="Discount View"> | ||
48 | + <rect key="frame" x="179" y="14" width="84" height="84"/> | ||
49 | + <subviews> | ||
50 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XeI-PB-wG7"> | ||
51 | + <rect key="frame" x="5" y="31.666666666666664" width="74" height="21"/> | ||
52 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
53 | + <nil key="textColor"/> | ||
54 | + <nil key="highlightedColor"/> | ||
55 | + </label> | ||
56 | + </subviews> | ||
57 | + <color key="backgroundColor" systemColor="systemBackgroundColor"/> | ||
58 | + <constraints> | ||
59 | + <constraint firstAttribute="height" constant="84" id="8gp-O1-LgD"/> | ||
60 | + <constraint firstAttribute="width" constant="84" id="Mve-Yl-rsU"/> | ||
61 | + <constraint firstItem="XeI-PB-wG7" firstAttribute="centerY" secondItem="dnZ-fa-M3o" secondAttribute="centerY" id="Rlp-4Z-urE"/> | ||
62 | + <constraint firstAttribute="trailing" secondItem="XeI-PB-wG7" secondAttribute="trailing" constant="5" id="dyI-UO-uvn"/> | ||
63 | + <constraint firstItem="XeI-PB-wG7" firstAttribute="leading" secondItem="dnZ-fa-M3o" secondAttribute="leading" constant="5" id="eon-8Y-X7c"/> | ||
64 | + </constraints> | ||
65 | + </view> | ||
66 | + </subviews> | ||
67 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
68 | + <constraints> | ||
69 | + <constraint firstItem="09g-Nj-HG4" firstAttribute="leading" secondItem="8Ht-7Z-jiW" secondAttribute="leading" id="1AO-0a-ZpN"/> | ||
70 | + <constraint firstItem="dnZ-fa-M3o" firstAttribute="top" secondItem="8Ht-7Z-jiW" secondAttribute="top" constant="14" id="AC6-zX-rmc"/> | ||
71 | + <constraint firstItem="09g-Nj-HG4" firstAttribute="top" secondItem="8Ht-7Z-jiW" secondAttribute="top" id="DYc-4B-bTE"/> | ||
72 | + <constraint firstAttribute="bottom" secondItem="09g-Nj-HG4" secondAttribute="bottom" id="Rsg-ZQ-0bM"/> | ||
73 | + <constraint firstItem="4xy-g8-Ukx" firstAttribute="leading" secondItem="8Ht-7Z-jiW" secondAttribute="leading" constant="16" id="U8A-vw-Pca"/> | ||
74 | + <constraint firstItem="4xy-g8-Ukx" firstAttribute="top" secondItem="8Ht-7Z-jiW" secondAttribute="top" constant="13" id="ZGF-7X-iSN"/> | ||
75 | + <constraint firstAttribute="trailing" secondItem="09g-Nj-HG4" secondAttribute="trailing" id="qwK-yM-rD6"/> | ||
76 | + <constraint firstAttribute="trailing" secondItem="dnZ-fa-M3o" secondAttribute="trailing" constant="13" id="zAy-FM-iqd"/> | ||
77 | + </constraints> | ||
78 | + </view> | ||
79 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fZ6-8K-DXr" userLabel="Bottom View"> | ||
80 | + <rect key="frame" x="0.0" y="171" width="276" height="121"/> | ||
81 | + <subviews> | ||
82 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YtM-Db-ygP"> | ||
83 | + <rect key="frame" x="16" y="17" width="130" height="93"/> | ||
84 | + <subviews> | ||
85 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="63p-dI-yTa"> | ||
86 | + <rect key="frame" x="0.0" y="0.0" width="130" height="21"/> | ||
87 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
88 | + <nil key="textColor"/> | ||
89 | + <nil key="highlightedColor"/> | ||
90 | + </label> | ||
91 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="z30-VZ-8h3"> | ||
92 | + <rect key="frame" x="0.0" y="23" width="130" height="20.333333333333329"/> | ||
93 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
94 | + <nil key="textColor"/> | ||
95 | + <nil key="highlightedColor"/> | ||
96 | + </label> | ||
97 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PZ3-qH-3XH"> | ||
98 | + <rect key="frame" x="0.0" y="72" width="130" height="21"/> | ||
99 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
100 | + <nil key="textColor"/> | ||
101 | + <nil key="highlightedColor"/> | ||
102 | + </label> | ||
103 | + </subviews> | ||
104 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
105 | + <constraints> | ||
106 | + <constraint firstItem="z30-VZ-8h3" firstAttribute="leading" secondItem="YtM-Db-ygP" secondAttribute="leading" id="DHf-fQ-lXA"/> | ||
107 | + <constraint firstAttribute="trailing" secondItem="z30-VZ-8h3" secondAttribute="trailing" id="DnI-99-e8v"/> | ||
108 | + <constraint firstAttribute="trailing" secondItem="PZ3-qH-3XH" secondAttribute="trailing" id="JA5-Am-dmE"/> | ||
109 | + <constraint firstItem="63p-dI-yTa" firstAttribute="top" secondItem="YtM-Db-ygP" secondAttribute="top" id="Kfa-m3-rWW"/> | ||
110 | + <constraint firstAttribute="trailing" secondItem="63p-dI-yTa" secondAttribute="trailing" id="bxa-5c-OE6"/> | ||
111 | + <constraint firstItem="63p-dI-yTa" firstAttribute="leading" secondItem="YtM-Db-ygP" secondAttribute="leading" id="gk1-Zr-MIl"/> | ||
112 | + <constraint firstItem="PZ3-qH-3XH" firstAttribute="leading" secondItem="YtM-Db-ygP" secondAttribute="leading" id="hE4-2m-iZk"/> | ||
113 | + <constraint firstItem="z30-VZ-8h3" firstAttribute="top" secondItem="63p-dI-yTa" secondAttribute="bottom" constant="2" id="hfr-Gi-omT"/> | ||
114 | + <constraint firstAttribute="bottom" secondItem="PZ3-qH-3XH" secondAttribute="bottom" id="xMs-dh-ybb"/> | ||
115 | + </constraints> | ||
116 | + </view> | ||
117 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="hM2-8T-4vX"> | ||
118 | + <rect key="frame" x="164" y="17" width="84" height="84"/> | ||
119 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
120 | + <constraints> | ||
121 | + <constraint firstAttribute="width" constant="84" id="6to-Dv-ukR"/> | ||
122 | + <constraint firstAttribute="height" constant="84" id="QjU-rO-Uqx"/> | ||
123 | + </constraints> | ||
124 | + </imageView> | ||
125 | + </subviews> | ||
126 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
127 | + <constraints> | ||
128 | + <constraint firstAttribute="bottom" secondItem="YtM-Db-ygP" secondAttribute="bottom" constant="11" id="6ul-bC-Jpj"/> | ||
129 | + <constraint firstItem="YtM-Db-ygP" firstAttribute="leading" secondItem="fZ6-8K-DXr" secondAttribute="leading" constant="16" id="C7J-bI-8ap"/> | ||
130 | + <constraint firstItem="hM2-8T-4vX" firstAttribute="top" secondItem="fZ6-8K-DXr" secondAttribute="top" constant="17" id="HBF-J2-ed0"/> | ||
131 | + <constraint firstItem="hM2-8T-4vX" firstAttribute="leading" secondItem="YtM-Db-ygP" secondAttribute="trailing" constant="18" id="WML-nR-cLh"/> | ||
132 | + <constraint firstItem="YtM-Db-ygP" firstAttribute="top" secondItem="fZ6-8K-DXr" secondAttribute="top" constant="17" id="f0H-m3-OAP"/> | ||
133 | + <constraint firstAttribute="trailing" secondItem="hM2-8T-4vX" secondAttribute="trailing" constant="28" id="jKa-nW-g41"/> | ||
134 | + <constraint firstAttribute="height" constant="121" id="ptz-uq-5rq"/> | ||
135 | + </constraints> | ||
136 | + </view> | ||
137 | + </subviews> | ||
138 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
139 | + <constraints> | ||
140 | + <constraint firstItem="fZ6-8K-DXr" firstAttribute="leading" secondItem="x0X-za-HZ9" secondAttribute="leading" id="DKa-9V-lma"/> | ||
141 | + <constraint firstAttribute="trailing" secondItem="8Ht-7Z-jiW" secondAttribute="trailing" id="LK1-Cz-JUh"/> | ||
142 | + <constraint firstItem="8Ht-7Z-jiW" firstAttribute="top" secondItem="x0X-za-HZ9" secondAttribute="top" id="P9v-fu-Mhs"/> | ||
143 | + <constraint firstAttribute="height" constant="292" id="lA6-op-vsG"/> | ||
144 | + <constraint firstAttribute="trailing" secondItem="fZ6-8K-DXr" secondAttribute="trailing" id="lAU-n1-MKy"/> | ||
145 | + <constraint firstItem="8Ht-7Z-jiW" firstAttribute="leading" secondItem="x0X-za-HZ9" secondAttribute="leading" id="sK9-Tw-Yqn"/> | ||
146 | + <constraint firstAttribute="bottom" secondItem="fZ6-8K-DXr" secondAttribute="bottom" id="u4z-JD-qby"/> | ||
147 | + <constraint firstItem="fZ6-8K-DXr" firstAttribute="top" secondItem="8Ht-7Z-jiW" secondAttribute="bottom" id="v5X-nL-hKm"/> | ||
148 | + </constraints> | ||
149 | + </view> | ||
150 | + </subviews> | ||
151 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
152 | + <constraints> | ||
153 | + <constraint firstItem="x0X-za-HZ9" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="22" id="SzO-Fk-ZCB"/> | ||
154 | + <constraint firstItem="x0X-za-HZ9" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="uQN-BA-o6w"/> | ||
155 | + <constraint firstAttribute="trailing" secondItem="x0X-za-HZ9" secondAttribute="trailing" constant="22" id="vi4-dI-lx3"/> | ||
156 | + <constraint firstAttribute="bottom" secondItem="x0X-za-HZ9" secondAttribute="bottom" id="zsL-aX-JRL"/> | ||
157 | + </constraints> | ||
158 | + </tableViewCellContentView> | ||
159 | + <viewLayoutGuide key="safeArea" id="njF-e1-oar"/> | ||
160 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
161 | + <connections> | ||
162 | + <outlet property="bannerImage" destination="09g-Nj-HG4" id="1Ux-ZI-rVQ"/> | ||
163 | + <outlet property="discountLabel" destination="XeI-PB-wG7" id="Kyy-aE-GgR"/> | ||
164 | + <outlet property="discountView" destination="dnZ-fa-M3o" id="fht-MW-ToM"/> | ||
165 | + <outlet property="expirationLabel" destination="PZ3-qH-3XH" id="vIb-60-EVp"/> | ||
166 | + <outlet property="favoriteImage" destination="T91-Ra-dmT" id="leZ-Tz-zo8"/> | ||
167 | + <outlet property="logoImage" destination="hM2-8T-4vX" id="Zqv-yp-lrD"/> | ||
168 | + <outlet property="parentView" destination="x0X-za-HZ9" id="OE0-tT-IPd"/> | ||
169 | + <outlet property="subtitleLabel" destination="z30-VZ-8h3" id="s40-MP-4Jn"/> | ||
170 | + <outlet property="titleLabel" destination="63p-dI-yTa" id="YOe-I2-Cly"/> | ||
171 | + </connections> | ||
172 | + <point key="canvasLocation" x="68.702290076335871" y="77.464788732394368"/> | ||
173 | + </tableViewCell> | ||
174 | + </objects> | ||
175 | + <resources> | ||
176 | + <systemColor name="systemBackgroundColor"> | ||
177 | + <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
178 | + </systemColor> | ||
179 | + </resources> | ||
180 | +</document> |
1 | +// | ||
2 | +// ProfileFilterCollectionViewCell.swift | ||
3 | +// SwiftWarplyFramework | ||
4 | +// | ||
5 | +// Created by Manos Chorianopoulos on 29/5/25. | ||
6 | +// | ||
7 | + | ||
8 | +import UIKit | ||
9 | + | ||
10 | +@objc public class ProfileFilterCollectionViewCell: UICollectionViewCell { | ||
11 | + @IBOutlet weak var parentView: UIView! | ||
12 | + @IBOutlet weak var titleLabel: UILabel! | ||
13 | + | ||
14 | + public override func awakeFromNib() { | ||
15 | + super.awakeFromNib() | ||
16 | + // Initialization code | ||
17 | + } | ||
18 | + | ||
19 | + func configureCell(data: CouponFilterModel, isSelected: Bool) { | ||
20 | + if (isSelected) { | ||
21 | + parentView.backgroundColor = UIColor(rgb: 0x000F1E) | ||
22 | + parentView.layer.cornerRadius = 4.0 | ||
23 | + | ||
24 | + titleLabel.font = UIFont(name: "PingLCG-Bold", size: 16) | ||
25 | + titleLabel.textColor = UIColor(rgb: 0xFFFFFF) | ||
26 | + | ||
27 | + } else { | ||
28 | + parentView.backgroundColor = .clear | ||
29 | + parentView.layer.borderWidth = 2 | ||
30 | + parentView.layer.borderColor = UIColor(rgb: 0x56586A).cgColor | ||
31 | + parentView.layer.cornerRadius = 4.0 | ||
32 | + | ||
33 | + titleLabel.font = UIFont(name: "PingLCG-Bold", size: 16) | ||
34 | + titleLabel.textColor = UIColor(rgb: 0xFFFFFF) | ||
35 | + } | ||
36 | + titleLabel.text = data.title | ||
37 | + } | ||
38 | +} |
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> | ||
3 | + <device id="retina6_12" orientation="portrait" appearance="light"/> | ||
4 | + <dependencies> | ||
5 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/> | ||
6 | + <capability name="Safe area layout guides" minToolsVersion="9.0"/> | ||
7 | + <capability name="System colors in document resources" minToolsVersion="11.0"/> | ||
8 | + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||
9 | + </dependencies> | ||
10 | + <objects> | ||
11 | + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> | ||
12 | + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> | ||
13 | + <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="ProfileFilterCollectionViewCell" id="gTV-IL-0wX" customClass="ProfileFilterCollectionViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target"> | ||
14 | + <rect key="frame" x="0.0" y="0.0" width="145" height="66"/> | ||
15 | + <autoresizingMask key="autoresizingMask"/> | ||
16 | + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> | ||
17 | + <rect key="frame" x="0.0" y="0.0" width="145" height="66"/> | ||
18 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | ||
19 | + <subviews> | ||
20 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NgU-Qp-M8l" userLabel="ParentView"> | ||
21 | + <rect key="frame" x="0.0" y="0.0" width="145" height="66"/> | ||
22 | + <subviews> | ||
23 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xq0-AN-QT6"> | ||
24 | + <rect key="frame" x="17" y="12" width="111" height="42"/> | ||
25 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
26 | + <nil key="textColor"/> | ||
27 | + <nil key="highlightedColor"/> | ||
28 | + </label> | ||
29 | + </subviews> | ||
30 | + <color key="backgroundColor" systemColor="systemBackgroundColor"/> | ||
31 | + <constraints> | ||
32 | + <constraint firstItem="Xq0-AN-QT6" firstAttribute="top" secondItem="NgU-Qp-M8l" secondAttribute="top" constant="12" id="Nro-8v-U0C"/> | ||
33 | + <constraint firstAttribute="trailing" secondItem="Xq0-AN-QT6" secondAttribute="trailing" constant="17" id="hKh-jv-VQR"/> | ||
34 | + <constraint firstItem="Xq0-AN-QT6" firstAttribute="leading" secondItem="NgU-Qp-M8l" secondAttribute="leading" constant="17" id="na6-tV-KQZ"/> | ||
35 | + <constraint firstAttribute="bottom" secondItem="Xq0-AN-QT6" secondAttribute="bottom" constant="12" id="pJO-74-XZO"/> | ||
36 | + </constraints> | ||
37 | + </view> | ||
38 | + </subviews> | ||
39 | + </view> | ||
40 | + <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/> | ||
41 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
42 | + <constraints> | ||
43 | + <constraint firstItem="NgU-Qp-M8l" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="RYQ-Qn-MSN"/> | ||
44 | + <constraint firstAttribute="trailing" secondItem="NgU-Qp-M8l" secondAttribute="trailing" id="efv-x1-lhD"/> | ||
45 | + <constraint firstItem="NgU-Qp-M8l" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="l7p-or-kC2"/> | ||
46 | + <constraint firstAttribute="bottom" secondItem="NgU-Qp-M8l" secondAttribute="bottom" id="te6-Qr-T6c"/> | ||
47 | + </constraints> | ||
48 | + <size key="customSize" width="145" height="66"/> | ||
49 | + <connections> | ||
50 | + <outlet property="parentView" destination="NgU-Qp-M8l" id="qhP-z2-cWY"/> | ||
51 | + <outlet property="titleLabel" destination="Xq0-AN-QT6" id="Hft-IP-ITh"/> | ||
52 | + </connections> | ||
53 | + <point key="canvasLocation" x="109.16030534351144" y="-5.6338028169014089"/> | ||
54 | + </collectionViewCell> | ||
55 | + </objects> | ||
56 | + <resources> | ||
57 | + <systemColor name="systemBackgroundColor"> | ||
58 | + <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
59 | + </systemColor> | ||
60 | + </resources> | ||
61 | +</document> |
1 | +// | ||
2 | +// ProfileHeaderTableViewCell.swift | ||
3 | +// SwiftWarplyFramework | ||
4 | +// | ||
5 | +// Created by Manos Chorianopoulos on 29/5/25. | ||
6 | +// | ||
7 | + | ||
8 | +import UIKit | ||
9 | + | ||
10 | +@objc public class ProfileHeaderTableViewCell: UITableViewCell { | ||
11 | + @IBOutlet weak var tagView1: UIView! | ||
12 | + @IBOutlet weak var tagLabel1: UILabel! | ||
13 | + @IBOutlet weak var tagView2: UIView! | ||
14 | + @IBOutlet weak var tagLabel2: UILabel! | ||
15 | + @IBOutlet weak var profileImage: UIImageView! | ||
16 | + | ||
17 | + public override func awakeFromNib() { | ||
18 | + super.awakeFromNib() | ||
19 | + | ||
20 | + profileImage.image = UIImage(named: "profile_pic_default", in: MyEmptyClass.resourceBundle(), compatibleWith: nil) | ||
21 | + | ||
22 | + tagView1.backgroundColor = UIColor(rgb: 0x09914E) | ||
23 | + tagView1.layer.cornerRadius = 4.0 | ||
24 | + tagLabel1.font = UIFont(name: "PingLCG-Regular", size: 17) | ||
25 | + tagLabel1.textColor = UIColor(rgb: 0xFFFFFF) | ||
26 | + | ||
27 | + tagView2.backgroundColor = UIColor(rgb: 0xFC9F25) | ||
28 | + tagView2.layer.cornerRadius = 4.0 | ||
29 | + tagLabel2.font = UIFont(name: "PingLCG-Regular", size: 17) | ||
30 | + tagLabel2.textColor = UIColor(rgb: 0xFFFFFF) | ||
31 | + } | ||
32 | + | ||
33 | + public override func setSelected(_ selected: Bool, animated: Bool) { | ||
34 | + super.setSelected(selected, animated: animated) | ||
35 | + | ||
36 | + // Configure the view for the selected state | ||
37 | + } | ||
38 | + | ||
39 | +} |
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> | ||
3 | + <device id="retina6_12" orientation="portrait" appearance="light"/> | ||
4 | + <dependencies> | ||
5 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/> | ||
6 | + <capability name="Safe area layout guides" minToolsVersion="9.0"/> | ||
7 | + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||
8 | + </dependencies> | ||
9 | + <objects> | ||
10 | + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> | ||
11 | + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> | ||
12 | + <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="ProfileHeaderTableViewCell" id="KGk-i7-Jjw" customClass="ProfileHeaderTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target"> | ||
13 | + <rect key="frame" x="0.0" y="0.0" width="320" height="44"/> | ||
14 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | ||
15 | + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" ambiguous="YES" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> | ||
16 | + <rect key="frame" x="0.0" y="0.0" width="320" height="44"/> | ||
17 | + <autoresizingMask key="autoresizingMask"/> | ||
18 | + <subviews> | ||
19 | + <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="EZC-E7-4NP" userLabel="Parent View"> | ||
20 | + <rect key="frame" x="31" y="0.0" width="258" height="43"/> | ||
21 | + <subviews> | ||
22 | + <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PbJ-yt-Kn6"> | ||
23 | + <rect key="frame" x="0.0" y="8.6666666666666643" width="58" height="26"/> | ||
24 | + <subviews> | ||
25 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Green" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3iK-77-YPt"> | ||
26 | + <rect key="frame" x="6" y="3" width="46" height="20"/> | ||
27 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
28 | + <fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/> | ||
29 | + <nil key="textColor"/> | ||
30 | + <nil key="highlightedColor"/> | ||
31 | + </label> | ||
32 | + </subviews> | ||
33 | + <color key="backgroundColor" red="0.035294117649999998" green="0.56862745100000001" blue="0.30588235289999999" alpha="1" colorSpace="calibratedRGB"/> | ||
34 | + <constraints> | ||
35 | + <constraint firstAttribute="bottom" secondItem="3iK-77-YPt" secondAttribute="bottom" constant="3" id="AzT-L8-M11"/> | ||
36 | + <constraint firstItem="3iK-77-YPt" firstAttribute="leading" secondItem="PbJ-yt-Kn6" secondAttribute="leading" constant="6" id="CXA-8o-8hw"/> | ||
37 | + <constraint firstItem="3iK-77-YPt" firstAttribute="top" secondItem="PbJ-yt-Kn6" secondAttribute="top" constant="3" id="HgB-cm-GWV"/> | ||
38 | + <constraint firstAttribute="trailing" secondItem="3iK-77-YPt" secondAttribute="trailing" constant="6" id="kcr-Fy-V25"/> | ||
39 | + </constraints> | ||
40 | + </view> | ||
41 | + <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="BIN-Ee-QVw"> | ||
42 | + <rect key="frame" x="66" y="8.6666666666666643" width="61.666666666666657" height="26"/> | ||
43 | + <subviews> | ||
44 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Family" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RrC-Qf-9bC"> | ||
45 | + <rect key="frame" x="6" y="3" width="49.666666666666664" height="20"/> | ||
46 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
47 | + <fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/> | ||
48 | + <nil key="textColor"/> | ||
49 | + <nil key="highlightedColor"/> | ||
50 | + </label> | ||
51 | + </subviews> | ||
52 | + <color key="backgroundColor" red="0.98823529409999999" green="0.62352941179999999" blue="0.1450980392" alpha="1" colorSpace="calibratedRGB"/> | ||
53 | + <constraints> | ||
54 | + <constraint firstItem="RrC-Qf-9bC" firstAttribute="top" secondItem="BIN-Ee-QVw" secondAttribute="top" constant="3" id="GPN-tb-Pfo"/> | ||
55 | + <constraint firstItem="RrC-Qf-9bC" firstAttribute="leading" secondItem="BIN-Ee-QVw" secondAttribute="leading" constant="6" id="NbB-AF-IA0"/> | ||
56 | + <constraint firstAttribute="bottom" secondItem="RrC-Qf-9bC" secondAttribute="bottom" constant="3" id="PLN-Gb-IUu"/> | ||
57 | + <constraint firstAttribute="trailing" secondItem="RrC-Qf-9bC" secondAttribute="trailing" constant="6" id="pdI-Ll-nUY"/> | ||
58 | + </constraints> | ||
59 | + </view> | ||
60 | + <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="oRt-jB-UR1"> | ||
61 | + <rect key="frame" x="221" y="0.0" width="37" height="43"/> | ||
62 | + <subviews> | ||
63 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ka7-9X-7t4"> | ||
64 | + <rect key="frame" x="0.0" y="0.0" width="37" height="37"/> | ||
65 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
66 | + <constraints> | ||
67 | + <constraint firstAttribute="width" constant="37" id="l80-J9-yl7"/> | ||
68 | + <constraint firstAttribute="height" constant="37" id="td4-wH-CiD"/> | ||
69 | + </constraints> | ||
70 | + </imageView> | ||
71 | + </subviews> | ||
72 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
73 | + <constraints> | ||
74 | + <constraint firstAttribute="bottom" secondItem="ka7-9X-7t4" secondAttribute="bottom" id="0YM-ws-0Dg"/> | ||
75 | + <constraint firstItem="ka7-9X-7t4" firstAttribute="top" secondItem="oRt-jB-UR1" secondAttribute="top" id="r2H-hN-E5S"/> | ||
76 | + <constraint firstAttribute="trailing" secondItem="ka7-9X-7t4" secondAttribute="trailing" id="tGk-Nv-WzC"/> | ||
77 | + <constraint firstItem="ka7-9X-7t4" firstAttribute="leading" secondItem="oRt-jB-UR1" secondAttribute="leading" id="te7-Gw-oyL"/> | ||
78 | + </constraints> | ||
79 | + </view> | ||
80 | + </subviews> | ||
81 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
82 | + <constraints> | ||
83 | + <constraint firstItem="oRt-jB-UR1" firstAttribute="top" secondItem="EZC-E7-4NP" secondAttribute="top" id="AEJ-YC-aVw"/> | ||
84 | + <constraint firstItem="PbJ-yt-Kn6" firstAttribute="leading" secondItem="EZC-E7-4NP" secondAttribute="leading" id="Afn-AJ-Tfk"/> | ||
85 | + <constraint firstItem="PbJ-yt-Kn6" firstAttribute="centerY" secondItem="EZC-E7-4NP" secondAttribute="centerY" id="fC0-9G-Ajq"/> | ||
86 | + <constraint firstAttribute="bottom" secondItem="oRt-jB-UR1" secondAttribute="bottom" id="mvy-dD-Q26"/> | ||
87 | + <constraint firstAttribute="trailing" secondItem="oRt-jB-UR1" secondAttribute="trailing" id="nAT-Wu-pvL"/> | ||
88 | + <constraint firstItem="oRt-jB-UR1" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="BIN-Ee-QVw" secondAttribute="trailing" constant="8" id="ohN-Bc-zfQ"/> | ||
89 | + <constraint firstItem="BIN-Ee-QVw" firstAttribute="centerY" secondItem="EZC-E7-4NP" secondAttribute="centerY" id="q7G-9L-LXt"/> | ||
90 | + <constraint firstItem="BIN-Ee-QVw" firstAttribute="leading" secondItem="PbJ-yt-Kn6" secondAttribute="trailing" constant="8" id="yPy-YQ-6bl"/> | ||
91 | + </constraints> | ||
92 | + </view> | ||
93 | + </subviews> | ||
94 | + <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="calibratedRGB"/> | ||
95 | + <constraints> | ||
96 | + <constraint firstItem="EZC-E7-4NP" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="31" id="5YW-dG-HjU"/> | ||
97 | + <constraint firstAttribute="trailing" secondItem="EZC-E7-4NP" secondAttribute="trailing" constant="31" id="6BI-8F-Fsl"/> | ||
98 | + <constraint firstAttribute="bottom" secondItem="EZC-E7-4NP" secondAttribute="bottom" id="spA-yG-SaN"/> | ||
99 | + <constraint firstItem="EZC-E7-4NP" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="27" id="zUZ-e2-jYJ"/> | ||
100 | + </constraints> | ||
101 | + </tableViewCellContentView> | ||
102 | + <viewLayoutGuide key="safeArea" id="njF-e1-oar"/> | ||
103 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
104 | + <connections> | ||
105 | + <outlet property="profileImage" destination="ka7-9X-7t4" id="ejB-Ra-63T"/> | ||
106 | + <outlet property="tagLabel1" destination="3iK-77-YPt" id="q1E-7d-qjF"/> | ||
107 | + <outlet property="tagLabel2" destination="RrC-Qf-9bC" id="5Vq-uh-qaL"/> | ||
108 | + <outlet property="tagView1" destination="PbJ-yt-Kn6" id="kCL-Ll-U6s"/> | ||
109 | + <outlet property="tagView2" destination="BIN-Ee-QVw" id="fkF-yO-znw"/> | ||
110 | + </connections> | ||
111 | + <point key="canvasLocation" x="70" y="-11"/> | ||
112 | + </tableViewCell> | ||
113 | + </objects> | ||
114 | +</document> |
1 | +// | ||
2 | +// ProfileQuestionnaireTableViewCell.swift | ||
3 | +// SwiftWarplyFramework | ||
4 | +// | ||
5 | +// Created by Manos Chorianopoulos on 29/5/25. | ||
6 | +// | ||
7 | + | ||
8 | +import UIKit | ||
9 | + | ||
10 | +@objc public class ProfileQuestionnaireTableViewCell: UITableViewCell { | ||
11 | + @IBOutlet weak var questionnaireBannerImage: UIImageView! | ||
12 | + | ||
13 | + public override func awakeFromNib() { | ||
14 | + super.awakeFromNib() | ||
15 | + | ||
16 | + questionnaireBannerImage.image = UIImage(named: "questionnaire_banner", in: MyEmptyClass.resourceBundle(), compatibleWith: nil) | ||
17 | + | ||
18 | + } | ||
19 | + | ||
20 | + public override func setSelected(_ selected: Bool, animated: Bool) { | ||
21 | + super.setSelected(selected, animated: animated) | ||
22 | + | ||
23 | + // Configure the view for the selected state | ||
24 | + } | ||
25 | + | ||
26 | +} |
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> | ||
3 | + <device id="retina6_12" orientation="portrait" appearance="light"/> | ||
4 | + <dependencies> | ||
5 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/> | ||
6 | + <capability name="Safe area layout guides" minToolsVersion="9.0"/> | ||
7 | + <capability name="System colors in document resources" minToolsVersion="11.0"/> | ||
8 | + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | ||
9 | + </dependencies> | ||
10 | + <objects> | ||
11 | + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> | ||
12 | + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> | ||
13 | + <tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="ProfileQuestionnaireTableViewCell" rowHeight="211" id="KGk-i7-Jjw" customClass="ProfileQuestionnaireTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target"> | ||
14 | + <rect key="frame" x="0.0" y="0.0" width="320" height="211"/> | ||
15 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | ||
16 | + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" ambiguous="YES" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM"> | ||
17 | + <rect key="frame" x="0.0" y="0.0" width="320" height="211"/> | ||
18 | + <autoresizingMask key="autoresizingMask"/> | ||
19 | + <subviews> | ||
20 | + <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="YrO-k4-v2O" userLabel="ParentView"> | ||
21 | + <rect key="frame" x="24" y="35" width="272" height="9"/> | ||
22 | + <subviews> | ||
23 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="N8L-PD-UP8"> | ||
24 | + <rect key="frame" x="0.0" y="0.0" width="272" height="159"/> | ||
25 | + <color key="backgroundColor" systemColor="systemRedColor"/> | ||
26 | + <constraints> | ||
27 | + <constraint firstAttribute="height" constant="159" id="r1F-lV-yNf"/> | ||
28 | + </constraints> | ||
29 | + </imageView> | ||
30 | + </subviews> | ||
31 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
32 | + <constraints> | ||
33 | + <constraint firstItem="N8L-PD-UP8" firstAttribute="leading" secondItem="YrO-k4-v2O" secondAttribute="leading" id="Ay6-kG-U8L"/> | ||
34 | + <constraint firstAttribute="bottom" secondItem="N8L-PD-UP8" secondAttribute="bottom" id="S87-T5-YdQ"/> | ||
35 | + <constraint firstAttribute="trailing" secondItem="N8L-PD-UP8" secondAttribute="trailing" id="WGt-wu-sFI"/> | ||
36 | + <constraint firstItem="N8L-PD-UP8" firstAttribute="top" secondItem="YrO-k4-v2O" secondAttribute="top" id="ZxG-A7-Zci"/> | ||
37 | + </constraints> | ||
38 | + </view> | ||
39 | + </subviews> | ||
40 | + <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="calibratedRGB"/> | ||
41 | + <constraints> | ||
42 | + <constraint firstAttribute="bottom" secondItem="YrO-k4-v2O" secondAttribute="bottom" id="6we-5l-yeL"/> | ||
43 | + <constraint firstAttribute="trailing" secondItem="YrO-k4-v2O" secondAttribute="trailing" constant="24" id="7CD-5N-Kwy"/> | ||
44 | + <constraint firstItem="YrO-k4-v2O" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="24" id="ExZ-x2-yiF"/> | ||
45 | + <constraint firstItem="YrO-k4-v2O" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="35" id="iID-80-Men"/> | ||
46 | + </constraints> | ||
47 | + </tableViewCellContentView> | ||
48 | + <viewLayoutGuide key="safeArea" id="njF-e1-oar"/> | ||
49 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
50 | + <connections> | ||
51 | + <outlet property="questionnaireBannerImage" destination="N8L-PD-UP8" id="BMn-6A-UVw"/> | ||
52 | + </connections> | ||
53 | + <point key="canvasLocation" x="68.702290076335871" y="47.535211267605639"/> | ||
54 | + </tableViewCell> | ||
55 | + </objects> | ||
56 | + <resources> | ||
57 | + <systemColor name="systemRedColor"> | ||
58 | + <color red="1" green="0.23137254900000001" blue="0.18823529410000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | ||
59 | + </systemColor> | ||
60 | + </resources> | ||
61 | +</document> |
1 | +// | ||
2 | +// Models.swift | ||
3 | +// SwiftWarplyFramework | ||
4 | +// | ||
5 | +// Created by Manos Chorianopoulos on 29/5/25. | ||
6 | +// | ||
7 | + | ||
8 | + | ||
9 | +struct SectionModel { | ||
10 | + let title: String | ||
11 | + let count: Int | ||
12 | + let offers: [OfferModel] | ||
13 | +} | ||
14 | + | ||
15 | +struct OfferModel { | ||
16 | + let category: String | ||
17 | + let title: String | ||
18 | + let description: String | ||
19 | + let discount: String | ||
20 | + let discountType: String // e.g., "price", "percentage", "free", "buyOneGetOne", etc. | ||
21 | + let bannerImage: String | ||
22 | + let merchantLogo: String | ||
23 | + let expirationDate: String | ||
24 | + let color: UInt | ||
25 | + var isFavorite: Bool | ||
26 | + var active: Bool? | ||
27 | + var redeemed: Bool? | ||
28 | +} | ||
29 | + | ||
30 | +struct CouponFilterModel { | ||
31 | + let title: String | ||
32 | +} |
... | @@ -7,24 +7,6 @@ | ... | @@ -7,24 +7,6 @@ |
7 | 7 | ||
8 | import UIKit | 8 | import UIKit |
9 | 9 | ||
10 | -struct SectionModel { | ||
11 | - let title: String | ||
12 | - let count: Int | ||
13 | - let offers: [OfferModel] | ||
14 | -} | ||
15 | - | ||
16 | -struct OfferModel { | ||
17 | - let category: String | ||
18 | - let title: String | ||
19 | - let description: String | ||
20 | - let discount: String | ||
21 | - let discountType: String // e.g., "price", "percentage", "free", "buyOneGetOne", etc. | ||
22 | - let bannerImage: String | ||
23 | - let merchantLogo: String | ||
24 | - let expirationDate: String | ||
25 | - let color: UInt | ||
26 | - var isFavorite: Bool | ||
27 | -} | ||
28 | 10 | ||
29 | @objc public class MyRewardsViewController: UIViewController { | 11 | @objc public class MyRewardsViewController: UIViewController { |
30 | @IBOutlet weak var tableView: UITableView! | 12 | @IBOutlet weak var tableView: UITableView! |
... | @@ -80,18 +62,6 @@ struct OfferModel { | ... | @@ -80,18 +62,6 @@ struct OfferModel { |
80 | color: 0x8A2BE2, | 62 | color: 0x8A2BE2, |
81 | isFavorite: false | 63 | isFavorite: false |
82 | ), | 64 | ), |
83 | - OfferModel( | ||
84 | - category: "Διαγωνισμός", | ||
85 | - title: "Διαγωνισμός Κού-πονς!", | ||
86 | - description: "13 Απίθανα ΔΩΡΑ σε περιμένουν!", | ||
87 | - discount: "", | ||
88 | - discountType: "contest", | ||
89 | - bannerImage: "contest_banner_5", | ||
90 | - merchantLogo: "contest_logo", | ||
91 | - expirationDate: "30/06/2025", | ||
92 | - color: 0x8A2BE2, | ||
93 | - isFavorite: false | ||
94 | - ), | ||
95 | // Top offers | 65 | // Top offers |
96 | OfferModel( | 66 | OfferModel( |
97 | category: "Top offers", | 67 | category: "Top offers", |
... | @@ -301,6 +271,13 @@ struct OfferModel { | ... | @@ -301,6 +271,13 @@ struct OfferModel { |
301 | ) | 271 | ) |
302 | ] | 272 | ] |
303 | 273 | ||
274 | + let contestUrls: [String] = [ | ||
275 | + "https://warply.s3.amazonaws.com/dei/campaigns/tesla_dev/index.html", | ||
276 | + "https://warply.s3.amazonaws.com/dei/campaigns/EnergySaverContest_dev/index.html", | ||
277 | + "https://warply.s3.amazonaws.com/dei/campaigns/match_dev/index.html", | ||
278 | + "https://warply.s3.amazonaws.com/dei/campaigns/questionnaire_dev" | ||
279 | + ] | ||
280 | + | ||
304 | var bannerOffersSection: SectionModel? | 281 | var bannerOffersSection: SectionModel? |
305 | var topOffersSection: SectionModel? | 282 | var topOffersSection: SectionModel? |
306 | var favoriteOffersSection: SectionModel? | 283 | var favoriteOffersSection: SectionModel? |
... | @@ -423,23 +400,30 @@ struct OfferModel { | ... | @@ -423,23 +400,30 @@ struct OfferModel { |
423 | self.tableView.reloadData() | 400 | self.tableView.reloadData() |
424 | } | 401 | } |
425 | 402 | ||
426 | - private func openCampaignViewController(with offer: OfferModel) { | 403 | + private func openCampaignViewController(with index: Int) { |
427 | 404 | ||
428 | let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self)) | 405 | let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self)) |
429 | if let vc = storyboard.instantiateViewController(withIdentifier: "CampaignViewController") as? SwiftWarplyFramework.CampaignViewController { | 406 | if let vc = storyboard.instantiateViewController(withIdentifier: "CampaignViewController") as? SwiftWarplyFramework.CampaignViewController { |
430 | - vc.campaignUrl = "https://warply.s3.amazonaws.com/dei/campaigns/DehEasterContest_stage/index.html" | 407 | +// vc.campaignUrl = "https://warply.s3.amazonaws.com/dei/campaigns/DehEasterContest_stage/index.html" |
408 | + vc.campaignUrl = contestUrls[index] | ||
431 | vc.showHeader = true | 409 | vc.showHeader = true |
432 | self.navigationController?.pushViewController(vc, animated: true) | 410 | self.navigationController?.pushViewController(vc, animated: true) |
433 | // self.present(vc, animated: true) | 411 | // self.present(vc, animated: true) |
434 | } | 412 | } |
435 | } | 413 | } |
436 | - | 414 | + |
437 | private func openCouponViewController(with offer: OfferModel) { | 415 | private func openCouponViewController(with offer: OfferModel) { |
438 | let vc = SwiftWarplyFramework.CouponViewController(nibName: "CouponViewController", bundle: Bundle(for: MyEmptyClass.self)) | 416 | let vc = SwiftWarplyFramework.CouponViewController(nibName: "CouponViewController", bundle: Bundle(for: MyEmptyClass.self)) |
439 | vc.coupon = offer | 417 | vc.coupon = offer |
440 | 418 | ||
441 | self.navigationController?.pushViewController(vc, animated: true) | 419 | self.navigationController?.pushViewController(vc, animated: true) |
442 | } | 420 | } |
421 | + | ||
422 | + private func openProfileViewController() { | ||
423 | + let vc = SwiftWarplyFramework.ProfileViewController(nibName: "ProfileViewController", bundle: Bundle(for: MyEmptyClass.self)) | ||
424 | + | ||
425 | + self.navigationController?.pushViewController(vc, animated: true) | ||
426 | + } | ||
443 | } | 427 | } |
444 | 428 | ||
445 | // MARK: - TableView | 429 | // MARK: - TableView |
... | @@ -536,9 +520,14 @@ extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{ | ... | @@ -536,9 +520,14 @@ extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{ |
536 | 520 | ||
537 | // Add delegate conformance | 521 | // Add delegate conformance |
538 | extension MyRewardsViewController: MyRewardsBannerOffersScrollTableViewCellDelegate { | 522 | extension MyRewardsViewController: MyRewardsBannerOffersScrollTableViewCellDelegate { |
539 | - func didSelectBannerOffer(_ offer: OfferModel) { | 523 | + func didSelectBannerOffer(_ index: Int) { |
540 | // Navigate to CampaignViewController | 524 | // Navigate to CampaignViewController |
541 | - openCampaignViewController(with: offer) | 525 | + openCampaignViewController(with: index) |
526 | + } | ||
527 | + | ||
528 | + func didTapProfileButton() { | ||
529 | + // Navigate to ProfileViewController | ||
530 | + openProfileViewController() | ||
542 | } | 531 | } |
543 | } | 532 | } |
544 | 533 | ... | ... |
... | @@ -171,6 +171,14 @@ import UIKit | ... | @@ -171,6 +171,14 @@ import UIKit |
171 | redeemed: true | 171 | redeemed: true |
172 | ) | 172 | ) |
173 | ] | 173 | ] |
174 | + | ||
175 | + let couponFilters: [CouponFilterModel] = [ | ||
176 | + CouponFilterModel(title: "Ενεργά"), | ||
177 | + CouponFilterModel(title: "Αγαπημένα"), | ||
178 | + CouponFilterModel(title: "Εξαργυρωμένα") | ||
179 | + ] | ||
180 | + | ||
181 | + var couponFilterSelected: CouponFilterModel = CouponFilterModel(title: "Ενεργά") | ||
174 | 182 | ||
175 | var forYouOffersSection: SectionModel? | 183 | var forYouOffersSection: SectionModel? |
176 | var activeOffersSection: SectionModel? | 184 | var activeOffersSection: SectionModel? |
... | @@ -187,8 +195,11 @@ import UIKit | ... | @@ -187,8 +195,11 @@ import UIKit |
187 | setNavigationTitle("Το προφίλ μου") | 195 | setNavigationTitle("Το προφίλ μου") |
188 | 196 | ||
189 | // Register XIBs for table view cells | 197 | // Register XIBs for table view cells |
190 | - // tableView.register(UINib(nibName: "MyRewardsBannerOffersScrollTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "MyRewardsBannerOffersScrollTableViewCell") | 198 | + tableView.register(UINib(nibName: "ProfileHeaderTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "ProfileHeaderTableViewCell") |
191 | - // tableView.register(UINib(nibName: "MyRewardsOffersScrollTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "MyRewardsOffersScrollTableViewCell") | 199 | + tableView.register(UINib(nibName: "ProfileQuestionnaireTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "ProfileQuestionnaireTableViewCell") |
200 | + tableView.register(UINib(nibName: "MyRewardsOffersScrollTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "MyRewardsOffersScrollTableViewCell") | ||
201 | + tableView.register(UINib(nibName: "ProfileCouponFiltersTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "ProfileCouponFiltersTableViewCell") | ||
202 | + tableView.register(UINib(nibName: "ProfileCouponTableViewCell", bundle: Bundle(for: MyEmptyClass.self)), forCellReuseIdentifier: "ProfileCouponTableViewCell") | ||
192 | 203 | ||
193 | // Set up table view | 204 | // Set up table view |
194 | tableView.delegate = self | 205 | tableView.delegate = self |
... | @@ -211,12 +222,14 @@ import UIKit | ... | @@ -211,12 +222,14 @@ import UIKit |
211 | ) | 222 | ) |
212 | 223 | ||
213 | // Favorite Offers | 224 | // Favorite Offers |
214 | - let activeOffers = allOffers.filter { $0.active } | 225 | + let activeOffers = allOffers.filter { $0.active ?? false } |
215 | activeOffersSection = SectionModel( | 226 | activeOffersSection = SectionModel( |
216 | title: "Ενεργά", | 227 | title: "Ενεργά", |
217 | count: activeOffers.count, | 228 | count: activeOffers.count, |
218 | offers: activeOffers | 229 | offers: activeOffers |
219 | ) | 230 | ) |
231 | + | ||
232 | + filteredOffersSection = activeOffersSection | ||
220 | 233 | ||
221 | // Favorite Offers | 234 | // Favorite Offers |
222 | let favoriteOffers = allOffers.filter { $0.isFavorite } | 235 | let favoriteOffers = allOffers.filter { $0.isFavorite } |
... | @@ -227,7 +240,7 @@ import UIKit | ... | @@ -227,7 +240,7 @@ import UIKit |
227 | ) | 240 | ) |
228 | 241 | ||
229 | // Favorite Offers | 242 | // Favorite Offers |
230 | - let redeemedOffers = allOffers.filter { $0.redeemed } | 243 | + let redeemedOffers = allOffers.filter { $0.redeemed ?? false } |
231 | redeemedOffersSection = SectionModel( | 244 | redeemedOffersSection = SectionModel( |
232 | title: "Αγαπημένα", | 245 | title: "Αγαπημένα", |
233 | count: redeemedOffers.count, | 246 | count: redeemedOffers.count, |
... | @@ -236,13 +249,20 @@ import UIKit | ... | @@ -236,13 +249,20 @@ import UIKit |
236 | 249 | ||
237 | self.tableView.reloadData() | 250 | self.tableView.reloadData() |
238 | } | 251 | } |
252 | + | ||
253 | + private func openCouponViewController(with offer: OfferModel) { | ||
254 | + let vc = SwiftWarplyFramework.CouponViewController(nibName: "CouponViewController", bundle: Bundle(for: MyEmptyClass.self)) | ||
255 | + vc.coupon = offer | ||
256 | + | ||
257 | + self.navigationController?.pushViewController(vc, animated: true) | ||
258 | + } | ||
239 | } | 259 | } |
240 | 260 | ||
241 | // MARK: - TableView | 261 | // MARK: - TableView |
242 | -extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{ | 262 | +extension ProfileViewController: UITableViewDelegate, UITableViewDataSource { |
243 | 263 | ||
244 | public func numberOfSections(in tableView: UITableView) -> Int { | 264 | public func numberOfSections(in tableView: UITableView) -> Int { |
245 | - return 4 + filteredOffersSection.offers.count | 265 | + return 4 + (filteredOffersSection?.offers.count ?? 0) |
246 | } | 266 | } |
247 | 267 | ||
248 | public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | 268 | public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
... | @@ -272,35 +292,37 @@ extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{ | ... | @@ -272,35 +292,37 @@ extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{ |
272 | 292 | ||
273 | public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | 293 | public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
274 | if (indexPath.section == 0) { | 294 | if (indexPath.section == 0) { |
275 | - let cell = tableView.dequeueReusableCell(withIdentifier: "MyRewardsBannerOffersScrollTableViewCell", for: indexPath) as! MyRewardsBannerOffersScrollTableViewCell | 295 | + let cell = tableView.dequeueReusableCell(withIdentifier: "ProfileHeaderTableViewCell", for: indexPath) as! ProfileHeaderTableViewCell |
276 | - cell.delegate = self // Set the banner offers delegate | 296 | +// cell.delegate = self // Set the banner offers delegate |
277 | - cell.configureCell(data: self.bannerOffersSection) | 297 | +// cell.configureCell(data: self.bannerOffersSection) |
278 | // cell.parent = self | 298 | // cell.parent = self |
279 | return cell | 299 | return cell |
280 | 300 | ||
281 | - } else { | 301 | + } else if (indexPath.section == 1) { |
302 | + let cell = tableView.dequeueReusableCell(withIdentifier: "ProfileQuestionnaireTableViewCell", for: indexPath) as! ProfileQuestionnaireTableViewCell | ||
303 | + return cell | ||
304 | + | ||
305 | + } else if (indexPath.section == 2) { | ||
282 | let cell = tableView.dequeueReusableCell(withIdentifier: "MyRewardsOffersScrollTableViewCell", for: indexPath) as! MyRewardsOffersScrollTableViewCell | 306 | let cell = tableView.dequeueReusableCell(withIdentifier: "MyRewardsOffersScrollTableViewCell", for: indexPath) as! MyRewardsOffersScrollTableViewCell |
283 | 307 | ||
284 | cell.delegate = self // Set the offers delegate | 308 | cell.delegate = self // Set the offers delegate |
309 | + cell.configureCell(data: self.forYouOffersSection) | ||
285 | 310 | ||
286 | - if (indexPath.section == 1) { | 311 | + return cell |
287 | - cell.configureCell(data: self.topOffersSection) | ||
288 | - } else if (indexPath.section == 2) { | ||
289 | - cell.configureCell(data: self.favoriteOffersSection) | ||
290 | - } else if (indexPath.section == 3) { | ||
291 | - cell.configureCell(data: self.sustainableOffersSection) | ||
292 | - } else if (indexPath.section == 4) { | ||
293 | - cell.configureCell(data: self.familyOffersSection) | ||
294 | - } else if (indexPath.section == 5) { | ||
295 | - cell.configureCell(data: self.foodOffersSection) | ||
296 | - } else if (indexPath.section == 6) { | ||
297 | - cell.configureCell(data: self.escapeOffersSection) | ||
298 | - } else if (indexPath.section == 7) { | ||
299 | - cell.configureCell(data: self.childOffersSection) | ||
300 | - } else { | ||
301 | - cell.configureCell(data: self.shoppingOffersSection) | ||
302 | - } | ||
303 | 312 | ||
313 | + } else if (indexPath.section == 3) { | ||
314 | + let cell = tableView.dequeueReusableCell(withIdentifier: "ProfileCouponFiltersTableViewCell", for: indexPath) as! ProfileCouponFiltersTableViewCell | ||
315 | + | ||
316 | + cell.delegate = self // Set the offers delegate | ||
317 | + cell.configureCell(data: self.couponFilters) | ||
318 | + | ||
319 | + return cell | ||
320 | + | ||
321 | + } else { | ||
322 | + let cell = tableView.dequeueReusableCell(withIdentifier: "ProfileCouponTableViewCell", for: indexPath) as! ProfileCouponTableViewCell | ||
323 | + if let offer = self.filteredOffersSection?.offers[indexPath.row] { | ||
324 | + cell.configureCell(data: offer) | ||
325 | + } | ||
304 | return cell | 326 | return cell |
305 | } | 327 | } |
306 | 328 | ||
... | @@ -330,3 +352,18 @@ extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{ | ... | @@ -330,3 +352,18 @@ extension MyRewardsViewController: UITableViewDelegate, UITableViewDataSource{ |
330 | } | 352 | } |
331 | } | 353 | } |
332 | 354 | ||
355 | +// Add delegate conformance | ||
356 | +extension ProfileViewController: MyRewardsOffersScrollTableViewCellDelegate { | ||
357 | + func didSelectOffer(_ offer: OfferModel) { | ||
358 | + // Navigate to CouponViewController | ||
359 | + openCouponViewController(with: offer) | ||
360 | + } | ||
361 | +} | ||
362 | + | ||
363 | +// Add delegate conformance | ||
364 | +extension ProfileViewController: ProfileCouponFiltersTableViewCellDelegate { | ||
365 | + func didSelectFilter(_ filter: CouponFilterModel) { | ||
366 | + self.couponFilterSelected = filter | ||
367 | + self.tableView.reloadData() | ||
368 | + } | ||
369 | +} | ... | ... |
-
Please register or login to post a comment