Showing
8 changed files
with
963 additions
and
2 deletions
| ... | @@ -51,6 +51,7 @@ let package = Package( | ... | @@ -51,6 +51,7 @@ let package = Package( |
| 51 | .process("cells/ProfileCouponTableViewCell/ProfileCouponTableViewCell.xib"), | 51 | .process("cells/ProfileCouponTableViewCell/ProfileCouponTableViewCell.xib"), |
| 52 | .process("cells/ProfileFilterCollectionViewCell/ProfileFilterCollectionViewCell.xib"), | 52 | .process("cells/ProfileFilterCollectionViewCell/ProfileFilterCollectionViewCell.xib"), |
| 53 | .process("screens/CouponViewController/CouponViewController.xib"), | 53 | .process("screens/CouponViewController/CouponViewController.xib"), |
| 54 | + .process("screens/CouponsetViewController/CouponsetViewController.xib"), | ||
| 54 | .process("screens/ProfileViewController/ProfileViewController.xib"), | 55 | .process("screens/ProfileViewController/ProfileViewController.xib"), |
| 55 | .process("screens/CampaignViewController/CampaignViewController.xib"), | 56 | .process("screens/CampaignViewController/CampaignViewController.xib"), |
| 56 | .process("cells/MyRewardsOfferCollectionViewCell/MyRewardsOfferCollectionViewCell.xib"), | 57 | .process("cells/MyRewardsOfferCollectionViewCell/MyRewardsOfferCollectionViewCell.xib"), | ... | ... |
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| 3 | +<plist version="1.0"> | ||
| 4 | +<dict> | ||
| 5 | + <key>SchemeUserState</key> | ||
| 6 | + <dict> | ||
| 7 | + <key>Pods-SwiftWarplyFramework.xcscheme_^#shared#^_</key> | ||
| 8 | + <dict> | ||
| 9 | + <key>orderHint</key> | ||
| 10 | + <integer>1</integer> | ||
| 11 | + </dict> | ||
| 12 | + </dict> | ||
| 13 | +</dict> | ||
| 14 | +</plist> |
| ... | @@ -71,6 +71,8 @@ | ... | @@ -71,6 +71,8 @@ |
| 71 | 1EDBAF112DE8443B00911E79 /* ProfileHeaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDBAF0E2DE8443B00911E79 /* ProfileHeaderTableViewCell.swift */; }; | 71 | 1EDBAF112DE8443B00911E79 /* ProfileHeaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDBAF0E2DE8443B00911E79 /* ProfileHeaderTableViewCell.swift */; }; |
| 72 | 1EDD0ABD2E0D308A005E162B /* XIBLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDD0ABC2E0D308A005E162B /* XIBLoader.swift */; }; | 72 | 1EDD0ABD2E0D308A005E162B /* XIBLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EDD0ABC2E0D308A005E162B /* XIBLoader.swift */; }; |
| 73 | 1EDD0AC62E0D68B6005E162B /* SQLite in Frameworks */ = {isa = PBXBuildFile; productRef = 1EDD0AC52E0D68B6005E162B /* SQLite */; }; | 73 | 1EDD0AC62E0D68B6005E162B /* SQLite in Frameworks */ = {isa = PBXBuildFile; productRef = 1EDD0AC52E0D68B6005E162B /* SQLite */; }; |
| 74 | + 622DA0AE2F51CAEE00308AB8 /* CouponsetViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 622DA0AD2F51CAEE00308AB8 /* CouponsetViewController.xib */; }; | ||
| 75 | + 622DA0AF2F51CAEE00308AB8 /* CouponsetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 622DA0AC2F51CAEE00308AB8 /* CouponsetViewController.swift */; }; | ||
| 74 | 7630AD9A6242D60846D6750C /* Pods_SwiftWarplyFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0D5F56DD4E5371A50AD2D87 /* Pods_SwiftWarplyFramework.framework */; }; | 76 | 7630AD9A6242D60846D6750C /* Pods_SwiftWarplyFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0D5F56DD4E5371A50AD2D87 /* Pods_SwiftWarplyFramework.framework */; }; |
| 75 | A07936762885E9CC00064122 /* UIColorExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A07936752885E9CC00064122 /* UIColorExtensions.swift */; }; | 77 | A07936762885E9CC00064122 /* UIColorExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A07936752885E9CC00064122 /* UIColorExtensions.swift */; }; |
| 76 | E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6A77852282933340045BBA8 /* SwiftWarplyFramework.docc */; }; | 78 | E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6A77852282933340045BBA8 /* SwiftWarplyFramework.docc */; }; |
| ... | @@ -146,6 +148,8 @@ | ... | @@ -146,6 +148,8 @@ |
| 146 | 1EDBAF0E2DE8443B00911E79 /* ProfileHeaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileHeaderTableViewCell.swift; sourceTree = "<group>"; }; | 148 | 1EDBAF0E2DE8443B00911E79 /* ProfileHeaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileHeaderTableViewCell.swift; sourceTree = "<group>"; }; |
| 147 | 1EDBAF0F2DE8443B00911E79 /* ProfileHeaderTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileHeaderTableViewCell.xib; sourceTree = "<group>"; }; | 149 | 1EDBAF0F2DE8443B00911E79 /* ProfileHeaderTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileHeaderTableViewCell.xib; sourceTree = "<group>"; }; |
| 148 | 1EDD0ABC2E0D308A005E162B /* XIBLoader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XIBLoader.swift; sourceTree = "<group>"; }; | 150 | 1EDD0ABC2E0D308A005E162B /* XIBLoader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XIBLoader.swift; sourceTree = "<group>"; }; |
| 151 | + 622DA0AC2F51CAEE00308AB8 /* CouponsetViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponsetViewController.swift; sourceTree = "<group>"; }; | ||
| 152 | + 622DA0AD2F51CAEE00308AB8 /* CouponsetViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CouponsetViewController.xib; sourceTree = "<group>"; }; | ||
| 149 | A07936752885E9CC00064122 /* UIColorExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColorExtensions.swift; sourceTree = "<group>"; }; | 153 | A07936752885E9CC00064122 /* UIColorExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColorExtensions.swift; sourceTree = "<group>"; }; |
| 150 | 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>"; }; | 154 | 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>"; }; |
| 151 | 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>"; }; | 155 | 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>"; }; |
| ... | @@ -319,6 +323,7 @@ | ... | @@ -319,6 +323,7 @@ |
| 319 | 1EA8E5B42DDF315600CD3418 /* screens */ = { | 323 | 1EA8E5B42DDF315600CD3418 /* screens */ = { |
| 320 | isa = PBXGroup; | 324 | isa = PBXGroup; |
| 321 | children = ( | 325 | children = ( |
| 326 | + 622DA0AB2F51CA9100308AB8 /* CouponsetViewController */, | ||
| 322 | 1EBE45642E02DDF90055A0D4 /* CampaignViewController */, | 327 | 1EBE45642E02DDF90055A0D4 /* CampaignViewController */, |
| 323 | 1E917CD32DDF6472002221D8 /* MyRewardsViewController */, | 328 | 1E917CD32DDF6472002221D8 /* MyRewardsViewController */, |
| 324 | 1E917CD82DDF687E002221D8 /* CouponViewController */, | 329 | 1E917CD82DDF687E002221D8 /* CouponViewController */, |
| ... | @@ -425,6 +430,15 @@ | ... | @@ -425,6 +430,15 @@ |
| 425 | path = ProfileFilterCollectionViewCell; | 430 | path = ProfileFilterCollectionViewCell; |
| 426 | sourceTree = "<group>"; | 431 | sourceTree = "<group>"; |
| 427 | }; | 432 | }; |
| 433 | + 622DA0AB2F51CA9100308AB8 /* CouponsetViewController */ = { | ||
| 434 | + isa = PBXGroup; | ||
| 435 | + children = ( | ||
| 436 | + 622DA0AC2F51CAEE00308AB8 /* CouponsetViewController.swift */, | ||
| 437 | + 622DA0AD2F51CAEE00308AB8 /* CouponsetViewController.xib */, | ||
| 438 | + ); | ||
| 439 | + path = CouponsetViewController; | ||
| 440 | + sourceTree = "<group>"; | ||
| 441 | + }; | ||
| 428 | 98AD36FA62350CEABCD961A7 /* Frameworks */ = { | 442 | 98AD36FA62350CEABCD961A7 /* Frameworks */ = { |
| 429 | isa = PBXGroup; | 443 | isa = PBXGroup; |
| 430 | children = ( | 444 | children = ( |
| ... | @@ -598,6 +612,7 @@ | ... | @@ -598,6 +612,7 @@ |
| 598 | 1E116F682DE845B1009AE791 /* ProfileFilterCollectionViewCell.xib in Resources */, | 612 | 1E116F682DE845B1009AE791 /* ProfileFilterCollectionViewCell.xib in Resources */, |
| 599 | 1EB4F4252DE09AAC00D934C0 /* MyRewardsBannerOffersScrollTableViewCell.xib in Resources */, | 613 | 1EB4F4252DE09AAC00D934C0 /* MyRewardsBannerOffersScrollTableViewCell.xib in Resources */, |
| 600 | 1EA8E5C02DDF427A00CD3418 /* PingLCG-Bold.otf in Resources */, | 614 | 1EA8E5C02DDF427A00CD3418 /* PingLCG-Bold.otf in Resources */, |
| 615 | + 622DA0AE2F51CAEE00308AB8 /* CouponsetViewController.xib in Resources */, | ||
| 601 | 1E64E1832DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib in Resources */, | 616 | 1E64E1832DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib in Resources */, |
| 602 | 1EA8E5C12DDF427A00CD3418 /* PingLCG-Light.otf in Resources */, | 617 | 1EA8E5C12DDF427A00CD3418 /* PingLCG-Light.otf in Resources */, |
| 603 | 1EA8E5C22DDF427A00CD3418 /* PingLCG-Regular.otf in Resources */, | 618 | 1EA8E5C22DDF427A00CD3418 /* PingLCG-Regular.otf in Resources */, |
| ... | @@ -660,6 +675,7 @@ | ... | @@ -660,6 +675,7 @@ |
| 660 | 1E089E062DF87CED007459F1 /* Endpoints.swift in Sources */, | 675 | 1E089E062DF87CED007459F1 /* Endpoints.swift in Sources */, |
| 661 | 1E089E072DF87CED007459F1 /* NetworkService.swift in Sources */, | 676 | 1E089E072DF87CED007459F1 /* NetworkService.swift in Sources */, |
| 662 | 1EBE45672E02DE9A0055A0D4 /* CampaignViewController.swift in Sources */, | 677 | 1EBE45672E02DE9A0055A0D4 /* CampaignViewController.swift in Sources */, |
| 678 | + 622DA0AF2F51CAEE00308AB8 /* CouponsetViewController.swift in Sources */, | ||
| 663 | 1E089DFE2DF87C39007459F1 /* Coupon.swift in Sources */, | 679 | 1E089DFE2DF87C39007459F1 /* Coupon.swift in Sources */, |
| 664 | 1E089DFF2DF87C39007459F1 /* OfferModel.swift in Sources */, | 680 | 1E089DFF2DF87C39007459F1 /* OfferModel.swift in Sources */, |
| 665 | 1ED41E4C2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift in Sources */, | 681 | 1ED41E4C2DE0C24D00836ABA /* MyRewardsBannerOfferCollectionViewCell.swift in Sources */, | ... | ... |
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
| 3 | +<plist version="1.0"> | ||
| 4 | +<dict> | ||
| 5 | + <key>SchemeUserState</key> | ||
| 6 | + <dict> | ||
| 7 | + <key>SwiftWarplyFramework.xcscheme_^#shared#^_</key> | ||
| 8 | + <dict> | ||
| 9 | + <key>orderHint</key> | ||
| 10 | + <integer>0</integer> | ||
| 11 | + </dict> | ||
| 12 | + </dict> | ||
| 13 | +</dict> | ||
| 14 | +</plist> |
No preview for this file type
| 1 | +// | ||
| 2 | +// CouponsetViewController.swift | ||
| 3 | +// SwiftWarplyFramework | ||
| 4 | +// | ||
| 5 | +// Created by Manos Chorianopoulos on 27/2/26. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +import UIKit | ||
| 9 | + | ||
| 10 | +@objc public class CouponsetViewController: UIViewController { | ||
| 11 | + @IBOutlet weak var couponImage: UIImageView! | ||
| 12 | + | ||
| 13 | + // MARK: - Initializers | ||
| 14 | + public convenience init() { | ||
| 15 | + self.init(nibName: "CouponsetViewController", bundle: Bundle.frameworkBundle) | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { | ||
| 19 | + super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + required init?(coder: NSCoder) { | ||
| 23 | + super.init(coder: coder) | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + @IBOutlet weak var infoView: UIView! | ||
| 27 | + @IBOutlet weak var infoImage: UIImageView! | ||
| 28 | + @IBOutlet weak var infoLabel: UILabel! | ||
| 29 | + | ||
| 30 | + @IBOutlet weak var favoriteImage: UIImageView! | ||
| 31 | + @IBOutlet weak var shareImage: UIImageView! | ||
| 32 | + | ||
| 33 | + @IBOutlet weak var titleLabel: UILabel! | ||
| 34 | + @IBOutlet weak var subtitleLabel: UILabel! | ||
| 35 | + @IBOutlet weak var expirationLabel: UILabel! | ||
| 36 | + @IBOutlet weak var detailsLabel: UILabel! | ||
| 37 | + | ||
| 38 | + // MARK: - IBOutlets for Coupon Code Section | ||
| 39 | + @IBOutlet weak var couponCodeContainerView: UIView! | ||
| 40 | + @IBOutlet weak var couponCodeHeaderView: UIView! | ||
| 41 | + @IBOutlet weak var couponCodeContentView: UIView! | ||
| 42 | + | ||
| 43 | + // Header elements | ||
| 44 | + @IBOutlet weak var couponCodeTitleLabel: UILabel! | ||
| 45 | + @IBOutlet weak var couponCodeArrowImage: UIImageView! | ||
| 46 | + @IBOutlet weak var couponCodeButton: UIButton! | ||
| 47 | + | ||
| 48 | + // Content elements (initially hidden) | ||
| 49 | + @IBOutlet weak var couponCodeValueLabel: UILabel! | ||
| 50 | + @IBOutlet weak var copyButtonImage: UIImageView! | ||
| 51 | + @IBOutlet weak var copyButton: UIButton! | ||
| 52 | + | ||
| 53 | + // Constraints for animation | ||
| 54 | + @IBOutlet weak var couponCodeContentHeightConstraint: NSLayoutConstraint! | ||
| 55 | + | ||
| 56 | + // MARK: - IBOutlets for Coupon Code Section | ||
| 57 | + @IBOutlet weak var couponQRContainerView: UIView! | ||
| 58 | + @IBOutlet weak var couponQRHeaderView: UIView! | ||
| 59 | + @IBOutlet weak var couponQRContentView: UIView! | ||
| 60 | + | ||
| 61 | + // Header elements | ||
| 62 | + @IBOutlet weak var couponQRTitleLabel: UILabel! | ||
| 63 | + @IBOutlet weak var couponQRArrowImage: UIImageView! | ||
| 64 | + @IBOutlet weak var couponQRButton: UIButton! | ||
| 65 | + | ||
| 66 | + // Content elements (initially hidden) | ||
| 67 | + @IBOutlet weak var couponQRImage: UIImageView! | ||
| 68 | + | ||
| 69 | + // Constraints for animation | ||
| 70 | + @IBOutlet weak var couponQRContentHeightConstraint: NSLayoutConstraint! | ||
| 71 | + | ||
| 72 | + @IBOutlet weak var termsButtonView: UIView! | ||
| 73 | + @IBOutlet weak var termsButtonTitleLabel: UILabel! | ||
| 74 | + @IBOutlet weak var termsButtonArrowImage: UIImageView! | ||
| 75 | + @IBOutlet weak var termsButton: UIButton! | ||
| 76 | + @IBOutlet weak var termsLabel: UILabel! | ||
| 77 | + @IBOutlet weak var termsLabelHeight: NSLayoutConstraint! | ||
| 78 | + | ||
| 79 | + @IBOutlet weak var mapButton: UIButton! | ||
| 80 | + | ||
| 81 | + @IBOutlet weak var websiteButton: UIButton! | ||
| 82 | + | ||
| 83 | + var couponset: CouponSetItemModel? | ||
| 84 | + private var isDetailsExpanded = false | ||
| 85 | + private var isCouponCodeExpanded = false | ||
| 86 | + private var isCouponQRExpanded = false | ||
| 87 | + private var isTermsExpanded = false | ||
| 88 | + | ||
| 89 | + public override func viewDidLoad() { | ||
| 90 | + super.viewDidLoad() | ||
| 91 | + | ||
| 92 | + // Show navigation bar for this screen (with back button) | ||
| 93 | + self.navigationController?.setNavigationBarHidden(false, animated: false) | ||
| 94 | + setBackButton() | ||
| 95 | + setNavigationTitle("Προσφορά") | ||
| 96 | + | ||
| 97 | + infoView.backgroundColor = UIColor(rgb: 0xFFFFFF) | ||
| 98 | + infoView.layer.cornerRadius = 10.0 | ||
| 99 | + infoView.layer.borderWidth = 1.0 | ||
| 100 | + infoView.layer.borderColor = UIColor(red: 0.01, green: 0.05, blue: 0.11, alpha: 0.19).cgColor | ||
| 101 | + | ||
| 102 | + infoImage.image = UIImage(named: "info", in: Bundle.frameworkResourceBundle, compatibleWith: nil) | ||
| 103 | + shareImage.image = UIImage(named: "share", in: Bundle.frameworkResourceBundle, compatibleWith: nil) | ||
| 104 | + couponCodeArrowImage.image = UIImage(named: "arrow_down", in: Bundle.frameworkResourceBundle, compatibleWith: nil) | ||
| 105 | + copyButtonImage.image = UIImage(named: "copy", in: Bundle.frameworkResourceBundle, compatibleWith: nil) | ||
| 106 | + couponQRArrowImage.image = UIImage(named: "arrow_down", in: Bundle.frameworkResourceBundle, compatibleWith: nil) | ||
| 107 | + couponQRImage.image = UIImage(named: "barcode", in: Bundle.frameworkResourceBundle, compatibleWith: nil) | ||
| 108 | + termsButtonArrowImage.image = UIImage(named: "arrow_down", in: Bundle.frameworkResourceBundle, compatibleWith: nil) | ||
| 109 | + | ||
| 110 | + infoLabel.font = UIFont(name: "PingLCG-Regular", size: 13) | ||
| 111 | + infoLabel.textColor = UIColor(rgb: 0x020E1C) | ||
| 112 | + infoLabel.text = "Περισσότερα" | ||
| 113 | + | ||
| 114 | + couponCodeContainerView.backgroundColor = UIColor(rgb: 0xFFFFFF) | ||
| 115 | + couponCodeContainerView.layer.cornerRadius = 8.0 | ||
| 116 | + couponCodeContainerView.clipsToBounds = true | ||
| 117 | + couponCodeButton.addTarget(self, action: #selector(toggleCouponCode), for: .touchUpInside) | ||
| 118 | + couponCodeContentHeightConstraint.constant = 0 | ||
| 119 | + couponCodeContentView.isHidden = true | ||
| 120 | + | ||
| 121 | + couponQRContainerView.backgroundColor = UIColor(rgb: 0xFFFFFF) | ||
| 122 | + couponQRContainerView.layer.cornerRadius = 8.0 | ||
| 123 | + couponQRContainerView.clipsToBounds = true | ||
| 124 | + couponQRButton.addTarget(self, action: #selector(toggleCouponQR), for: .touchUpInside) | ||
| 125 | + couponQRContentHeightConstraint.constant = 0 | ||
| 126 | + couponQRContentView.isHidden = true | ||
| 127 | + | ||
| 128 | + termsButtonTitleLabel.font = UIFont(name: "PingLCG-Bold", size: 16) | ||
| 129 | + termsButtonTitleLabel.textColor = UIColor(rgb: 0x020E1C) | ||
| 130 | + termsButtonTitleLabel.text = "Όροι Χρήσης" | ||
| 131 | + termsButton.addTarget(self, action: #selector(toggleTerms), for: .touchUpInside) | ||
| 132 | + termsLabelHeight.constant = 0 | ||
| 133 | + | ||
| 134 | + mapButton.titleLabel?.font = UIFont(name: "PingLCG-Bold", size: 16) | ||
| 135 | + mapButton.setTitle("Καταστήματα κοντά μου", for: .normal) | ||
| 136 | + mapButton.setTitleColor(UIColor(rgb: 0xFFFFFF), for: .normal) | ||
| 137 | + mapButton.setTitleColor(UIColor(rgb: 0xFFFFFF), for: .highlighted) | ||
| 138 | + mapButton.layer.cornerRadius = 4.0 | ||
| 139 | + mapButton.backgroundColor = UIColor(rgb: 0x000F1E) | ||
| 140 | + | ||
| 141 | + websiteButton.titleLabel?.font = UIFont(name: "PingLCG-Bold", size: 16) | ||
| 142 | + websiteButton.setTitle("Δες το website", for: .normal) | ||
| 143 | + websiteButton.setTitleColor(UIColor(rgb: 0x000F1E), for: .normal) | ||
| 144 | + websiteButton.setTitleColor(UIColor(rgb: 0x000F1E), for: .highlighted) | ||
| 145 | + websiteButton.backgroundColor = .clear | ||
| 146 | + websiteButton.layer.borderWidth = 1 | ||
| 147 | + websiteButton.layer.borderColor = UIColor(rgb: 0x000F1E).cgColor | ||
| 148 | + websiteButton.layer.cornerRadius = 4.0 | ||
| 149 | + | ||
| 150 | + // Configure the view with offer data | ||
| 151 | + if let offer = couponset { | ||
| 152 | + setupUI(with: offer) | ||
| 153 | + } | ||
| 154 | + } | ||
| 155 | + | ||
| 156 | + private func setupUI(with couponset: CouponSetItemModel) { | ||
| 157 | + couponImage.image = UIImage(named: couponset.bannerImage, in: Bundle.frameworkResourceBundle, compatibleWith: nil) | ||
| 158 | + favoriteImage.image = UIImage(named: couponset.isFavorite ? "favorite2_filled" : "favorite2_empty", in: Bundle.frameworkResourceBundle, compatibleWith: nil) | ||
| 159 | + | ||
| 160 | + titleLabel.font = UIFont(name: "PingLCG-Bold", size: 24) | ||
| 161 | + titleLabel.textColor = UIColor(rgb: 0xF2709D) | ||
| 162 | + titleLabel.text = couponset.title | ||
| 163 | + | ||
| 164 | + subtitleLabel.font = UIFont(name: "PingLCG-Regular", size: 18) | ||
| 165 | + subtitleLabel.textColor = UIColor(rgb: 0x020E1C) | ||
| 166 | + subtitleLabel.text = couponset.description | ||
| 167 | + | ||
| 168 | + expirationLabel.font = UIFont(name: "PingLCG-Regular", size: 14) | ||
| 169 | + expirationLabel.textColor = UIColor(rgb: 0x020E1C) | ||
| 170 | +// expirationLabel.text = ("Η προσφορά ισχύει " + couponset.expirationDate) | ||
| 171 | + expirationLabel.text = "Η προσφορά ισχύει έως 30-09-2025" | ||
| 172 | + | ||
| 173 | + setupExpandableDetails() | ||
| 174 | + | ||
| 175 | + couponCodeTitleLabel.font = UIFont(name: "PingLCG-Regular", size: 16) | ||
| 176 | + couponCodeTitleLabel.textColor = UIColor(rgb: 0x000F1E) | ||
| 177 | + couponCodeTitleLabel.text = "Κωδικός Κουπονιού" | ||
| 178 | + | ||
| 179 | + couponCodeValueLabel.font = UIFont(name: "PingLCG-Bold", size: 24) | ||
| 180 | + couponCodeValueLabel.textColor = UIColor(rgb: 0x000F1E) | ||
| 181 | + couponCodeValueLabel.text = "coupons_ab" | ||
| 182 | + copyButton.addTarget(self, action: #selector(copyButtonTapped), for: .touchUpInside) | ||
| 183 | + | ||
| 184 | + couponQRTitleLabel.font = UIFont(name: "PingLCG-Regular", size: 16) | ||
| 185 | + couponQRTitleLabel.textColor = UIColor(rgb: 0x000F1E) | ||
| 186 | + couponQRTitleLabel.text = "QR Κουπονιού" | ||
| 187 | + | ||
| 188 | + termsLabel.font = UIFont(name: "PingLCG-Regular", size: 16) | ||
| 189 | + termsLabel.textColor = UIColor(rgb: 0x020E1C) | ||
| 190 | + termsLabel.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed ex euismod, feugiat justo eu, faucibus urna. Nulla sodales euismod arcu volutpat finibus. Etiam id urna at justo facilisis tempor. Morbi dignissim erat vitae magna sodales dignissim ac in mauris. Mauris tempor convallis tortor, interdum hendrerit turpis eleifend at. Praesent." | ||
| 191 | + } | ||
| 192 | + | ||
| 193 | + private var fullDetailsText = "" | ||
| 194 | + private var shouldTruncaitDetails = false | ||
| 195 | + | ||
| 196 | + private func setupExpandableDetails() { | ||
| 197 | + fullDetailsText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed ex euismod, feugiat justo eu, faucibus urna. Nulla sodales euismod arcu volutpat finibus. Etiam id urna at justo facilisis tempor. Morbi dignissim erat vitae magna sodales dignissim ac in mauris. Mauris tempor convallis tortor, interdum hendrerit turpis eleifend at. Praesent." | ||
| 198 | + | ||
| 199 | + detailsLabel.font = UIFont(name: "PingLCG-Regular", size: 18) | ||
| 200 | + detailsLabel.textColor = UIColor(rgb: 0x020E1C) | ||
| 201 | + | ||
| 202 | + updateDetailsText() | ||
| 203 | + | ||
| 204 | + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(toggleDetails)) | ||
| 205 | + detailsLabel.isUserInteractionEnabled = true | ||
| 206 | + detailsLabel.addGestureRecognizer(tapGesture) | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | + private func updateDetailsText() { | ||
| 210 | + if isDetailsExpanded { | ||
| 211 | + // Show full text with "Λιγότερα" | ||
| 212 | + if (shouldTruncaitDetails) { | ||
| 213 | + let fullTextWithLess = fullDetailsText + " Λιγότερα" | ||
| 214 | + let attributedString = createAttributedString(text: fullTextWithLess, linkText: "Λιγότερα") | ||
| 215 | + detailsLabel.attributedText = attributedString | ||
| 216 | + } else { | ||
| 217 | + detailsLabel.text = fullDetailsText | ||
| 218 | + } | ||
| 219 | + detailsLabel.numberOfLines = 0 | ||
| 220 | + } else { | ||
| 221 | + // Calculate approximate characters for 4 lines and truncate if needed | ||
| 222 | + let truncatedText = getTruncatedTextForFourLines() | ||
| 223 | + let attributedString = createAttributedString(text: truncatedText, linkText: "Περισσότερα") | ||
| 224 | + detailsLabel.attributedText = attributedString | ||
| 225 | + detailsLabel.numberOfLines = 4 | ||
| 226 | + } | ||
| 227 | + } | ||
| 228 | + | ||
| 229 | + private func getTruncatedTextForFourLines() -> String { | ||
| 230 | + // Calculate approximate characters that fit in 4 lines | ||
| 231 | + let labelWidth = detailsLabel.frame.width | ||
| 232 | + let fontSize: CGFloat = 18 | ||
| 233 | + let averageCharWidth: CGFloat = fontSize * 0.5 // Rough estimate for character width | ||
| 234 | + let charactersPerLine = Int(labelWidth / averageCharWidth) | ||
| 235 | + let maxCharactersFor4Lines = charactersPerLine * 4 | ||
| 236 | + | ||
| 237 | + let moreText = " Περισσότερα" | ||
| 238 | + let ellipsis = "..." | ||
| 239 | + let reservedCharacters = ellipsis.count + moreText.count + 15 | ||
| 240 | + | ||
| 241 | + // If text is short enough, don't truncate | ||
| 242 | + if fullDetailsText.count <= maxCharactersFor4Lines { | ||
| 243 | + shouldTruncaitDetails = false | ||
| 244 | + return fullDetailsText | ||
| 245 | + } else { | ||
| 246 | + shouldTruncaitDetails = true | ||
| 247 | + } | ||
| 248 | + | ||
| 249 | + // Calculate how many characters we can use from original text | ||
| 250 | + let availableCharacters = maxCharactersFor4Lines - reservedCharacters | ||
| 251 | + | ||
| 252 | + // Truncate text and add ellipsis + more | ||
| 253 | + let truncatedText = String(fullDetailsText.prefix(availableCharacters)) | ||
| 254 | + return truncatedText + ellipsis + moreText | ||
| 255 | + } | ||
| 256 | + | ||
| 257 | + private func createAttributedString(text: String, linkText: String) -> NSAttributedString { | ||
| 258 | + let attributedString = NSMutableAttributedString(string: text) | ||
| 259 | + | ||
| 260 | + // Regular text attributes | ||
| 261 | + let regularAttributes: [NSAttributedString.Key: Any] = [ | ||
| 262 | + .font: UIFont(name: "PingLCG-Regular", size: 18) ?? UIFont.systemFont(ofSize: 18), | ||
| 263 | + .foregroundColor: UIColor(rgb: 0x020E1C) | ||
| 264 | + ] | ||
| 265 | + | ||
| 266 | + // Link text attributes (blue color) | ||
| 267 | + let linkAttributes: [NSAttributedString.Key: Any] = [ | ||
| 268 | + .font: UIFont(name: "PingLCG-Regular", size: 18) ?? UIFont.systemFont(ofSize: 18), | ||
| 269 | + .foregroundColor: UIColor(rgb: 0x00A8E8) // Blue color | ||
| 270 | + ] | ||
| 271 | + | ||
| 272 | + // Apply regular attributes to entire text | ||
| 273 | + attributedString.addAttributes(regularAttributes, range: NSRange(location: 0, length: text.count)) | ||
| 274 | + | ||
| 275 | + // Find and style the link text | ||
| 276 | + if let range = text.range(of: linkText) { | ||
| 277 | + let nsRange = NSRange(range, in: text) | ||
| 278 | + attributedString.addAttributes(linkAttributes, range: nsRange) | ||
| 279 | + } | ||
| 280 | + | ||
| 281 | + return attributedString | ||
| 282 | + } | ||
| 283 | + | ||
| 284 | + | ||
| 285 | + @objc private func toggleDetails() { | ||
| 286 | + isDetailsExpanded.toggle() | ||
| 287 | + | ||
| 288 | + UIView.animate(withDuration: 0.3) { | ||
| 289 | + self.updateDetailsText() | ||
| 290 | + self.view.layoutIfNeeded() | ||
| 291 | + } | ||
| 292 | + } | ||
| 293 | + | ||
| 294 | + @objc private func toggleCouponCode() { | ||
| 295 | + isCouponCodeExpanded.toggle() | ||
| 296 | + | ||
| 297 | + // Calculate the target height before animation | ||
| 298 | + let targetHeight: CGFloat = isCouponCodeExpanded ? 80.67 : 0 // Set a fixed height instead of intrinsicContentSize | ||
| 299 | + | ||
| 300 | + // Show content immediately if expanding | ||
| 301 | + if isCouponCodeExpanded { | ||
| 302 | + couponCodeContentView.isHidden = false | ||
| 303 | + couponCodeContentView.alpha = 0 | ||
| 304 | + } | ||
| 305 | + | ||
| 306 | + UIView.animate(withDuration: 0.3, animations: { | ||
| 307 | + // // Update arrow image | ||
| 308 | + // self.couponCodeArrowImage.image = UIImage(named: self.isCouponCodeExpanded ? "arrow_up" : "arrow_down", in: MyEmptyClass.resourceBundle(), compatibleWith: nil) | ||
| 309 | + | ||
| 310 | + // Update arrow with rotation | ||
| 311 | + let rotation = self.isCouponCodeExpanded ? CGAffineTransform(rotationAngle: .pi) : .identity | ||
| 312 | + self.couponCodeArrowImage.transform = rotation | ||
| 313 | + | ||
| 314 | + // Update height constraint | ||
| 315 | + self.couponCodeContentHeightConstraint.constant = targetHeight | ||
| 316 | + | ||
| 317 | + // Update alpha for smooth fade | ||
| 318 | + self.couponCodeContentView.alpha = self.isCouponCodeExpanded ? 1.0 : 0.0 | ||
| 319 | + | ||
| 320 | + // Force layout update | ||
| 321 | + self.view.layoutIfNeeded() | ||
| 322 | + | ||
| 323 | + }) { _ in | ||
| 324 | + // Hide content after animation completes if collapsing | ||
| 325 | + if !self.isCouponCodeExpanded { | ||
| 326 | + self.couponCodeContentView.isHidden = true | ||
| 327 | + } | ||
| 328 | + } | ||
| 329 | + } | ||
| 330 | + | ||
| 331 | + @objc private func toggleCouponQR() { | ||
| 332 | + isCouponQRExpanded.toggle() | ||
| 333 | + | ||
| 334 | + // Calculate the target height before animation | ||
| 335 | + let targetHeight: CGFloat = isCouponQRExpanded ? 250 : 0 // Set a fixed height for QR code | ||
| 336 | + | ||
| 337 | + // Show content immediately if expanding | ||
| 338 | + if isCouponQRExpanded { | ||
| 339 | + couponQRContentView.isHidden = false | ||
| 340 | + couponQRContentView.alpha = 0 | ||
| 341 | + } | ||
| 342 | + | ||
| 343 | + UIView.animate(withDuration: 0.3, animations: { | ||
| 344 | + // Update arrow image | ||
| 345 | + // self.couponQRArrowImage.image = UIImage(named: self.isCouponQRExpanded ? "arrow_up" : "arrow_down", in: MyEmptyClass.resourceBundle(), compatibleWith: nil) | ||
| 346 | + | ||
| 347 | + // Update arrow with rotation | ||
| 348 | + let rotation = self.isCouponQRExpanded ? CGAffineTransform(rotationAngle: .pi) : .identity | ||
| 349 | + self.couponQRArrowImage.transform = rotation | ||
| 350 | + | ||
| 351 | + // Update height constraint | ||
| 352 | + self.couponQRContentHeightConstraint.constant = targetHeight | ||
| 353 | + | ||
| 354 | + // Update alpha for smooth fade | ||
| 355 | + self.couponQRContentView.alpha = self.isCouponQRExpanded ? 1.0 : 0.0 | ||
| 356 | + | ||
| 357 | + // Force layout update | ||
| 358 | + self.view.layoutIfNeeded() | ||
| 359 | + | ||
| 360 | + }) { _ in | ||
| 361 | + // Hide content after animation completes if collapsing | ||
| 362 | + if !self.isCouponQRExpanded { | ||
| 363 | + self.couponQRContentView.isHidden = true | ||
| 364 | + } | ||
| 365 | + } | ||
| 366 | + } | ||
| 367 | + | ||
| 368 | + @objc private func toggleTerms() { | ||
| 369 | + isTermsExpanded.toggle() | ||
| 370 | + | ||
| 371 | + UIView.animate(withDuration: 0.3) { | ||
| 372 | + // self.termsButtonArrowImage.image = UIImage(named: self.isTermsExpanded ? "arrow_up" : "arrow_down", in: MyEmptyClass.resourceBundle(), compatibleWith: nil) | ||
| 373 | + | ||
| 374 | + // Update arrow with rotation | ||
| 375 | + let rotation = self.isTermsExpanded ? CGAffineTransform(rotationAngle: .pi) : .identity | ||
| 376 | + self.termsButtonArrowImage.transform = rotation | ||
| 377 | + | ||
| 378 | + self.termsLabelHeight.constant = self.isTermsExpanded ? self.termsLabel.intrinsicContentSize.height : 0 | ||
| 379 | + self.view.layoutIfNeeded() | ||
| 380 | + } | ||
| 381 | + } | ||
| 382 | + | ||
| 383 | + @objc private func copyButtonTapped() { | ||
| 384 | + // Get the coupon code text | ||
| 385 | + guard let couponCode = couponCodeValueLabel.text else { return } | ||
| 386 | + | ||
| 387 | + // Copy to clipboard | ||
| 388 | + UIPasteboard.general.string = couponCode | ||
| 389 | + | ||
| 390 | + // Show visual feedback | ||
| 391 | + showCopyFeedback() | ||
| 392 | + | ||
| 393 | + // Optional: Haptic feedback | ||
| 394 | + let impactFeedback = UIImpactFeedbackGenerator(style: .medium) | ||
| 395 | + impactFeedback.impactOccurred() | ||
| 396 | + } | ||
| 397 | + | ||
| 398 | + private func showCopyFeedback() { | ||
| 399 | + // Store original image | ||
| 400 | + // let originalImage = copyButtonImage.image | ||
| 401 | + | ||
| 402 | + // Change to checkmark temporarily | ||
| 403 | + // copyButtonImage.image = UIImage(systemName: "checkmark") | ||
| 404 | + // copyButtonImage.tintColor = UIColor(rgb: 0x09914E) // Green color | ||
| 405 | + | ||
| 406 | + // Show toast message | ||
| 407 | + showToast(message: "Κωδικός αντιγράφηκε!") | ||
| 408 | + | ||
| 409 | + // Reset after 1.5 seconds | ||
| 410 | + // DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { | ||
| 411 | + // self.copyButtonImage.image = originalImage | ||
| 412 | + // self.copyButtonImage.tintColor = UIColor(rgb: 0xCBCED1) // Original color | ||
| 413 | + // } | ||
| 414 | + } | ||
| 415 | + | ||
| 416 | + private func showToast(message: String) { | ||
| 417 | + // Create toast label | ||
| 418 | + let toast = UILabel() | ||
| 419 | + toast.backgroundColor = UIColor.black.withAlphaComponent(0.8) | ||
| 420 | + toast.textColor = .white | ||
| 421 | + toast.textAlignment = .center | ||
| 422 | + toast.font = UIFont(name: "PingLCG-Regular", size: 14) | ||
| 423 | + toast.text = message | ||
| 424 | + toast.alpha = 0.0 | ||
| 425 | + toast.layer.cornerRadius = 8 | ||
| 426 | + toast.clipsToBounds = true | ||
| 427 | + | ||
| 428 | + // Add to view | ||
| 429 | + view.addSubview(toast) | ||
| 430 | + toast.translatesAutoresizingMaskIntoConstraints = false | ||
| 431 | + NSLayoutConstraint.activate([ | ||
| 432 | + toast.centerXAnchor.constraint(equalTo: view.centerXAnchor), | ||
| 433 | + toast.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -100), | ||
| 434 | + toast.widthAnchor.constraint(equalToConstant: 200), | ||
| 435 | + toast.heightAnchor.constraint(equalToConstant: 40) | ||
| 436 | + ]) | ||
| 437 | + | ||
| 438 | + // Animate in | ||
| 439 | + UIView.animate(withDuration: 0.3, animations: { | ||
| 440 | + toast.alpha = 1.0 | ||
| 441 | + }) { _ in | ||
| 442 | + // Animate out after delay | ||
| 443 | + UIView.animate(withDuration: 0.3, delay: 1.5, animations: { | ||
| 444 | + toast.alpha = 0.0 | ||
| 445 | + }) { _ in | ||
| 446 | + toast.removeFromSuperview() | ||
| 447 | + } | ||
| 448 | + } | ||
| 449 | + } | ||
| 450 | + | ||
| 451 | +} |
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="24506" 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="24504"/> | ||
| 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" customClass="CouponsetViewController" customModule="SwiftWarplyFramework" customModuleProvider="target"> | ||
| 12 | + <connections> | ||
| 13 | + <outlet property="copyButton" destination="m3i-vZ-CnB" id="RvZ-a5-lOk"/> | ||
| 14 | + <outlet property="copyButtonImage" destination="gvk-s4-PBD" id="NB5-Cs-XIZ"/> | ||
| 15 | + <outlet property="couponCodeArrowImage" destination="cLt-W0-J7b" id="rhG-F2-CEF"/> | ||
| 16 | + <outlet property="couponCodeButton" destination="Or4-Qv-FhV" id="HNQ-W8-EJt"/> | ||
| 17 | + <outlet property="couponCodeContainerView" destination="29d-hw-9hc" id="bFc-aC-TB8"/> | ||
| 18 | + <outlet property="couponCodeContentHeightConstraint" destination="Pdw-1g-EBR" id="c8h-hL-86W"/> | ||
| 19 | + <outlet property="couponCodeContentView" destination="fPF-zq-mmh" id="TzU-Cp-YiP"/> | ||
| 20 | + <outlet property="couponCodeHeaderView" destination="aiu-GV-BNh" id="S0d-Rf-fJk"/> | ||
| 21 | + <outlet property="couponCodeTitleLabel" destination="QFx-zm-Qpn" id="hwX-hU-Odi"/> | ||
| 22 | + <outlet property="couponCodeValueLabel" destination="fLU-pC-Plj" id="aJj-My-W8v"/> | ||
| 23 | + <outlet property="couponImage" destination="50f-Uw-WmD" id="yxn-pQ-nCT"/> | ||
| 24 | + <outlet property="couponQRArrowImage" destination="41k-Lv-Ekd" id="t3K-U3-iKg"/> | ||
| 25 | + <outlet property="couponQRButton" destination="GHf-9X-rhc" id="KTg-qi-csy"/> | ||
| 26 | + <outlet property="couponQRContainerView" destination="YkU-9O-TIA" id="ZYg-PQ-pc5"/> | ||
| 27 | + <outlet property="couponQRContentHeightConstraint" destination="WnV-ph-lxQ" id="mFh-ob-BUc"/> | ||
| 28 | + <outlet property="couponQRContentView" destination="g3y-cV-fMg" id="kGI-iD-j8P"/> | ||
| 29 | + <outlet property="couponQRHeaderView" destination="eUm-Wc-G5O" id="byR-SI-PUH"/> | ||
| 30 | + <outlet property="couponQRImage" destination="Zkh-qS-gYz" id="5aD-AM-Qc7"/> | ||
| 31 | + <outlet property="couponQRTitleLabel" destination="yia-c1-g1x" id="Aft-FH-B0b"/> | ||
| 32 | + <outlet property="detailsLabel" destination="tOt-gP-Et5" id="H2V-Uq-Dsj"/> | ||
| 33 | + <outlet property="expirationLabel" destination="PZ8-Go-A85" id="hXE-lo-i0w"/> | ||
| 34 | + <outlet property="favoriteImage" destination="kQb-LM-Zaa" id="75J-Ez-RZx"/> | ||
| 35 | + <outlet property="infoImage" destination="RK8-R9-SZK" id="ZjM-PX-DgT"/> | ||
| 36 | + <outlet property="infoLabel" destination="oln-Zl-Mu1" id="OZb-dV-dlF"/> | ||
| 37 | + <outlet property="infoView" destination="raJ-sJ-NGX" id="fol-KV-D65"/> | ||
| 38 | + <outlet property="mapButton" destination="bTa-jT-Ufb" id="gH0-yo-in7"/> | ||
| 39 | + <outlet property="shareImage" destination="a1t-wH-dMg" id="Viw-KD-1JB"/> | ||
| 40 | + <outlet property="subtitleLabel" destination="iWC-mi-WKw" id="peM-oa-eSS"/> | ||
| 41 | + <outlet property="termsButton" destination="eGV-3B-aQo" id="Y0X-hP-SDU"/> | ||
| 42 | + <outlet property="termsButtonArrowImage" destination="TeG-69-TfN" id="FSe-bA-hAS"/> | ||
| 43 | + <outlet property="termsButtonTitleLabel" destination="uSf-AS-iFa" id="qJm-Be-jIb"/> | ||
| 44 | + <outlet property="termsButtonView" destination="12M-YC-Cox" id="YyK-Ox-225"/> | ||
| 45 | + <outlet property="termsLabel" destination="jug-xV-lmv" id="QLz-mM-7dR"/> | ||
| 46 | + <outlet property="termsLabelHeight" destination="9VB-9j-Q79" id="G0C-tp-L7M"/> | ||
| 47 | + <outlet property="titleLabel" destination="aSO-pm-a0W" id="uyw-AX-ElA"/> | ||
| 48 | + <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> | ||
| 49 | + <outlet property="websiteButton" destination="lU8-hR-MF0" id="cj6-X8-D8Z"/> | ||
| 50 | + </connections> | ||
| 51 | + </placeholder> | ||
| 52 | + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> | ||
| 53 | + <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> | ||
| 54 | + <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> | ||
| 55 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||
| 56 | + <subviews> | ||
| 57 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SHO-CC-9Fd" userLabel="Main View"> | ||
| 58 | + <rect key="frame" x="0.0" y="118" width="393" height="734"/> | ||
| 59 | + <subviews> | ||
| 60 | + <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GDr-bX-h2w"> | ||
| 61 | + <rect key="frame" x="0.0" y="0.0" width="393" height="734"/> | ||
| 62 | + <subviews> | ||
| 63 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mci-HQ-9iu" userLabel="Scroll Content View"> | ||
| 64 | + <rect key="frame" x="0.0" y="0.0" width="393" height="1177"/> | ||
| 65 | + <subviews> | ||
| 66 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="50f-Uw-WmD" userLabel="Coupon Image View"> | ||
| 67 | + <rect key="frame" x="0.0" y="0.0" width="393" height="211"/> | ||
| 68 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 69 | + <constraints> | ||
| 70 | + <constraint firstAttribute="height" constant="211" id="9fB-Rk-hOH"/> | ||
| 71 | + </constraints> | ||
| 72 | + </imageView> | ||
| 73 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="raJ-sJ-NGX" userLabel="Info View"> | ||
| 74 | + <rect key="frame" x="239" y="17" width="138" height="20.666666666666671"/> | ||
| 75 | + <subviews> | ||
| 76 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="RK8-R9-SZK" userLabel="Info Image View"> | ||
| 77 | + <rect key="frame" x="10" y="3.6666666666666581" width="13.666666666666664" height="13.333333333333336"/> | ||
| 78 | + <constraints> | ||
| 79 | + <constraint firstAttribute="width" constant="13.5" id="K5D-fX-XS0"/> | ||
| 80 | + <constraint firstAttribute="height" constant="13.5" id="vHI-H6-Ehp"/> | ||
| 81 | + </constraints> | ||
| 82 | + </imageView> | ||
| 83 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Περισσότερα" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oln-Zl-Mu1" userLabel="Info Label"> | ||
| 84 | + <rect key="frame" x="28" y="-0.33333333333334281" width="100" height="21"/> | ||
| 85 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
| 86 | + <nil key="textColor"/> | ||
| 87 | + <nil key="highlightedColor"/> | ||
| 88 | + </label> | ||
| 89 | + </subviews> | ||
| 90 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 91 | + <constraints> | ||
| 92 | + <constraint firstItem="RK8-R9-SZK" firstAttribute="top" secondItem="raJ-sJ-NGX" secondAttribute="top" constant="3.5" id="1MP-Cj-DCi"/> | ||
| 93 | + <constraint firstAttribute="trailing" secondItem="oln-Zl-Mu1" secondAttribute="trailing" constant="10" id="4SV-XE-IRS"/> | ||
| 94 | + <constraint firstItem="oln-Zl-Mu1" firstAttribute="centerY" secondItem="raJ-sJ-NGX" secondAttribute="centerY" id="e0C-hf-tpb"/> | ||
| 95 | + <constraint firstItem="RK8-R9-SZK" firstAttribute="leading" secondItem="raJ-sJ-NGX" secondAttribute="leading" constant="10" id="nim-JL-sOm"/> | ||
| 96 | + <constraint firstAttribute="bottom" secondItem="RK8-R9-SZK" secondAttribute="bottom" constant="3.5" id="t6e-f0-5Uf"/> | ||
| 97 | + <constraint firstItem="oln-Zl-Mu1" firstAttribute="leading" secondItem="RK8-R9-SZK" secondAttribute="trailing" constant="4.5" id="uSA-Gk-Fws"/> | ||
| 98 | + </constraints> | ||
| 99 | + </view> | ||
| 100 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aSO-pm-a0W" userLabel="Title Label"> | ||
| 101 | + <rect key="frame" x="24" y="234" width="249" height="20.333333333333343"/> | ||
| 102 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
| 103 | + <nil key="textColor"/> | ||
| 104 | + <nil key="highlightedColor"/> | ||
| 105 | + </label> | ||
| 106 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="kQb-LM-Zaa" userLabel="Favorite Image View"> | ||
| 107 | + <rect key="frame" x="284" y="228" width="40" height="40"/> | ||
| 108 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 109 | + <constraints> | ||
| 110 | + <constraint firstAttribute="width" constant="40" id="1I4-KR-lcE"/> | ||
| 111 | + <constraint firstAttribute="height" constant="40" id="uqG-Va-NOQ"/> | ||
| 112 | + </constraints> | ||
| 113 | + </imageView> | ||
| 114 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="a1t-wH-dMg" userLabel="Share Image View"> | ||
| 115 | + <rect key="frame" x="335" y="228" width="40" height="40"/> | ||
| 116 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 117 | + <constraints> | ||
| 118 | + <constraint firstAttribute="width" constant="40" id="WKb-kR-izm"/> | ||
| 119 | + <constraint firstAttribute="height" constant="40" id="Woz-Er-jU5"/> | ||
| 120 | + </constraints> | ||
| 121 | + </imageView> | ||
| 122 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iWC-mi-WKw" userLabel="Subtitle Label"> | ||
| 123 | + <rect key="frame" x="24" y="254.33333333333334" width="345" height="20.333333333333343"/> | ||
| 124 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
| 125 | + <nil key="textColor"/> | ||
| 126 | + <nil key="highlightedColor"/> | ||
| 127 | + </label> | ||
| 128 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PZ8-Go-A85" userLabel="Expiration Label"> | ||
| 129 | + <rect key="frame" x="24" y="288.66666666666669" width="345" height="20.333333333333314"/> | ||
| 130 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
| 131 | + <nil key="textColor"/> | ||
| 132 | + <nil key="highlightedColor"/> | ||
| 133 | + </label> | ||
| 134 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tOt-gP-Et5" userLabel="Details Label"> | ||
| 135 | + <rect key="frame" x="24" y="329" width="345" height="20.333333333333314"/> | ||
| 136 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
| 137 | + <nil key="textColor"/> | ||
| 138 | + <nil key="highlightedColor"/> | ||
| 139 | + </label> | ||
| 140 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="29d-hw-9hc" userLabel="CouponCodeContainerView"> | ||
| 141 | + <rect key="frame" x="24" y="383.33333333333331" width="345" height="134.33333333333331"/> | ||
| 142 | + <subviews> | ||
| 143 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aiu-GV-BNh" userLabel="CouponCodeHeaderView"> | ||
| 144 | + <rect key="frame" x="0.0" y="0.0" width="345" height="54.333333333333336"/> | ||
| 145 | + <subviews> | ||
| 146 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QFx-zm-Qpn" userLabel="CouponCodeTitleLabel"> | ||
| 147 | + <rect key="frame" x="17" y="17.000000000000057" width="277" height="20.333333333333329"/> | ||
| 148 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
| 149 | + <nil key="textColor"/> | ||
| 150 | + <nil key="highlightedColor"/> | ||
| 151 | + </label> | ||
| 152 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="cLt-W0-J7b" userLabel="CouponCodeArrowImage"> | ||
| 153 | + <rect key="frame" x="311" y="20.666666666666686" width="13" height="13"/> | ||
| 154 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 155 | + <constraints> | ||
| 156 | + <constraint firstAttribute="height" constant="13" id="5n5-5K-6Gl"/> | ||
| 157 | + <constraint firstAttribute="width" constant="13" id="HOb-s9-jHn"/> | ||
| 158 | + </constraints> | ||
| 159 | + </imageView> | ||
| 160 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Or4-Qv-FhV" userLabel="CouponCodeButton"> | ||
| 161 | + <rect key="frame" x="0.0" y="0.0" width="345" height="54.333333333333336"/> | ||
| 162 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 163 | + <state key="normal" title="Button"/> | ||
| 164 | + <buttonConfiguration key="configuration" style="plain" title="Button"> | ||
| 165 | + <color key="baseForegroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 166 | + </buttonConfiguration> | ||
| 167 | + </button> | ||
| 168 | + </subviews> | ||
| 169 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 170 | + <constraints> | ||
| 171 | + <constraint firstItem="Or4-Qv-FhV" firstAttribute="leading" secondItem="aiu-GV-BNh" secondAttribute="leading" id="3L1-2d-c9l"/> | ||
| 172 | + <constraint firstItem="cLt-W0-J7b" firstAttribute="leading" secondItem="QFx-zm-Qpn" secondAttribute="trailing" constant="17" id="BY0-sX-Ij6"/> | ||
| 173 | + <constraint firstItem="Or4-Qv-FhV" firstAttribute="top" secondItem="aiu-GV-BNh" secondAttribute="top" id="HbR-kc-b0S"/> | ||
| 174 | + <constraint firstAttribute="trailing" secondItem="Or4-Qv-FhV" secondAttribute="trailing" id="PAh-NE-K8G"/> | ||
| 175 | + <constraint firstAttribute="bottom" secondItem="Or4-Qv-FhV" secondAttribute="bottom" id="Xlv-SC-QlR"/> | ||
| 176 | + <constraint firstItem="QFx-zm-Qpn" firstAttribute="top" secondItem="aiu-GV-BNh" secondAttribute="top" constant="17" id="Yjr-Rs-j8t"/> | ||
| 177 | + <constraint firstAttribute="trailing" secondItem="cLt-W0-J7b" secondAttribute="trailing" constant="21" id="cf5-ur-kx8"/> | ||
| 178 | + <constraint firstItem="cLt-W0-J7b" firstAttribute="centerY" secondItem="aiu-GV-BNh" secondAttribute="centerY" id="oah-FX-t8K"/> | ||
| 179 | + <constraint firstAttribute="bottom" secondItem="QFx-zm-Qpn" secondAttribute="bottom" constant="17" id="pIk-PV-GY0"/> | ||
| 180 | + <constraint firstItem="QFx-zm-Qpn" firstAttribute="leading" secondItem="aiu-GV-BNh" secondAttribute="leading" constant="17" id="uMw-90-i4l"/> | ||
| 181 | + </constraints> | ||
| 182 | + </view> | ||
| 183 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fPF-zq-mmh" userLabel="CouponCodeContentView"> | ||
| 184 | + <rect key="frame" x="0.0" y="54.333333333333314" width="345" height="80"/> | ||
| 185 | + <subviews> | ||
| 186 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fLU-pC-Plj" userLabel="CouponCodeValueLabel"> | ||
| 187 | + <rect key="frame" x="16.999999999999996" y="26" width="56.666666666666657" height="28"/> | ||
| 188 | + <fontDescription key="fontDescription" type="system" pointSize="24"/> | ||
| 189 | + <nil key="textColor"/> | ||
| 190 | + <nil key="highlightedColor"/> | ||
| 191 | + </label> | ||
| 192 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="gvk-s4-PBD" userLabel="CopyButtonImage"> | ||
| 193 | + <rect key="frame" x="84.666666666666671" y="23.666666666666742" width="33" height="33"/> | ||
| 194 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 195 | + <constraints> | ||
| 196 | + <constraint firstAttribute="width" constant="33" id="ALY-g4-dih"/> | ||
| 197 | + <constraint firstAttribute="height" constant="33" id="PaJ-hI-z6k"/> | ||
| 198 | + </constraints> | ||
| 199 | + </imageView> | ||
| 200 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="m3i-vZ-CnB" userLabel="CouponCopyButton"> | ||
| 201 | + <rect key="frame" x="0.0" y="0.0" width="117.66666666666667" height="80"/> | ||
| 202 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 203 | + <state key="normal" title="Button"/> | ||
| 204 | + <buttonConfiguration key="configuration" style="plain" title="Button"> | ||
| 205 | + <color key="baseForegroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 206 | + </buttonConfiguration> | ||
| 207 | + </button> | ||
| 208 | + </subviews> | ||
| 209 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 210 | + <constraints> | ||
| 211 | + <constraint firstItem="gvk-s4-PBD" firstAttribute="trailing" secondItem="m3i-vZ-CnB" secondAttribute="trailing" id="1O8-g3-Mle"/> | ||
| 212 | + <constraint firstItem="fLU-pC-Plj" firstAttribute="top" secondItem="fPF-zq-mmh" secondAttribute="top" constant="26" id="CsE-B4-Fy6"/> | ||
| 213 | + <constraint firstItem="fLU-pC-Plj" firstAttribute="leading" secondItem="fPF-zq-mmh" secondAttribute="leading" constant="17" id="DcA-Yo-ZfZ"/> | ||
| 214 | + <constraint firstAttribute="bottom" secondItem="fLU-pC-Plj" secondAttribute="bottom" constant="26" id="J3W-Ep-wZk"/> | ||
| 215 | + <constraint firstAttribute="bottom" secondItem="m3i-vZ-CnB" secondAttribute="bottom" id="LUo-NY-g9R"/> | ||
| 216 | + <constraint firstItem="m3i-vZ-CnB" firstAttribute="leading" secondItem="fPF-zq-mmh" secondAttribute="leading" id="Lek-00-bZQ"/> | ||
| 217 | + <constraint firstAttribute="height" constant="80" id="Pdw-1g-EBR"/> | ||
| 218 | + <constraint firstItem="gvk-s4-PBD" firstAttribute="centerY" secondItem="fPF-zq-mmh" secondAttribute="centerY" id="dSc-Jp-D00"/> | ||
| 219 | + <constraint firstItem="m3i-vZ-CnB" firstAttribute="top" secondItem="fPF-zq-mmh" secondAttribute="top" id="grU-Ao-7aq"/> | ||
| 220 | + <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="gvk-s4-PBD" secondAttribute="trailing" constant="17" id="maW-DE-22h"/> | ||
| 221 | + <constraint firstItem="gvk-s4-PBD" firstAttribute="leading" secondItem="fLU-pC-Plj" secondAttribute="trailing" constant="11" id="viJ-A9-Vq4"/> | ||
| 222 | + </constraints> | ||
| 223 | + </view> | ||
| 224 | + </subviews> | ||
| 225 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 226 | + <constraints> | ||
| 227 | + <constraint firstItem="fPF-zq-mmh" firstAttribute="top" secondItem="aiu-GV-BNh" secondAttribute="bottom" id="4vc-xd-rhc"/> | ||
| 228 | + <constraint firstItem="aiu-GV-BNh" firstAttribute="leading" secondItem="29d-hw-9hc" secondAttribute="leading" id="78S-aR-g2z"/> | ||
| 229 | + <constraint firstAttribute="trailing" secondItem="aiu-GV-BNh" secondAttribute="trailing" id="TKA-7b-5s3"/> | ||
| 230 | + <constraint firstAttribute="trailing" secondItem="fPF-zq-mmh" secondAttribute="trailing" id="WvZ-7R-yvJ"/> | ||
| 231 | + <constraint firstItem="fPF-zq-mmh" firstAttribute="leading" secondItem="29d-hw-9hc" secondAttribute="leading" id="dUy-qI-4Gi"/> | ||
| 232 | + <constraint firstItem="aiu-GV-BNh" firstAttribute="top" secondItem="29d-hw-9hc" secondAttribute="top" id="sgM-Gh-9Zh"/> | ||
| 233 | + <constraint firstAttribute="bottom" secondItem="fPF-zq-mmh" secondAttribute="bottom" id="tKQ-k1-OV3"/> | ||
| 234 | + </constraints> | ||
| 235 | + </view> | ||
| 236 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YkU-9O-TIA" userLabel="CouponQRContainerView"> | ||
| 237 | + <rect key="frame" x="24" y="540.66666666666663" width="345" height="305"/> | ||
| 238 | + <subviews> | ||
| 239 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eUm-Wc-G5O" userLabel="CouponQRHeaderView"> | ||
| 240 | + <rect key="frame" x="0.0" y="0.0" width="345" height="55"/> | ||
| 241 | + <subviews> | ||
| 242 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yia-c1-g1x" userLabel="CouponQRTitleLabel"> | ||
| 243 | + <rect key="frame" x="17" y="17" width="277" height="21"/> | ||
| 244 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
| 245 | + <nil key="textColor"/> | ||
| 246 | + <nil key="highlightedColor"/> | ||
| 247 | + </label> | ||
| 248 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="41k-Lv-Ekd" userLabel="CouponQRArrowImage"> | ||
| 249 | + <rect key="frame" x="311" y="21" width="13" height="13"/> | ||
| 250 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 251 | + <constraints> | ||
| 252 | + <constraint firstAttribute="height" constant="13" id="6id-7o-w1B"/> | ||
| 253 | + <constraint firstAttribute="width" constant="13" id="GbL-3z-lLO"/> | ||
| 254 | + </constraints> | ||
| 255 | + </imageView> | ||
| 256 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="GHf-9X-rhc" userLabel="CouponQRButton"> | ||
| 257 | + <rect key="frame" x="0.0" y="0.0" width="345" height="55"/> | ||
| 258 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 259 | + <state key="normal" title="Button"/> | ||
| 260 | + <buttonConfiguration key="configuration" style="plain" title="Button"> | ||
| 261 | + <color key="baseForegroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 262 | + </buttonConfiguration> | ||
| 263 | + </button> | ||
| 264 | + </subviews> | ||
| 265 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 266 | + <constraints> | ||
| 267 | + <constraint firstItem="yia-c1-g1x" firstAttribute="leading" secondItem="eUm-Wc-G5O" secondAttribute="leading" constant="17" id="0Hm-ir-dIJ"/> | ||
| 268 | + <constraint firstItem="GHf-9X-rhc" firstAttribute="leading" secondItem="eUm-Wc-G5O" secondAttribute="leading" id="43c-Zl-wzz"/> | ||
| 269 | + <constraint firstAttribute="bottom" secondItem="GHf-9X-rhc" secondAttribute="bottom" id="4Cs-jO-J62"/> | ||
| 270 | + <constraint firstItem="41k-Lv-Ekd" firstAttribute="centerY" secondItem="eUm-Wc-G5O" secondAttribute="centerY" id="9z5-4x-NhN"/> | ||
| 271 | + <constraint firstItem="yia-c1-g1x" firstAttribute="top" secondItem="eUm-Wc-G5O" secondAttribute="top" constant="17" id="Goi-Tx-bOj"/> | ||
| 272 | + <constraint firstAttribute="bottom" secondItem="yia-c1-g1x" secondAttribute="bottom" constant="17" id="OT0-Qv-M2p"/> | ||
| 273 | + <constraint firstItem="41k-Lv-Ekd" firstAttribute="leading" secondItem="yia-c1-g1x" secondAttribute="trailing" constant="17" id="cmx-fJ-sSY"/> | ||
| 274 | + <constraint firstItem="GHf-9X-rhc" firstAttribute="top" secondItem="eUm-Wc-G5O" secondAttribute="top" id="ixt-bM-i74"/> | ||
| 275 | + <constraint firstAttribute="trailing" secondItem="GHf-9X-rhc" secondAttribute="trailing" id="kIR-05-5gY"/> | ||
| 276 | + <constraint firstAttribute="trailing" secondItem="41k-Lv-Ekd" secondAttribute="trailing" constant="21" id="nXi-62-ZGj"/> | ||
| 277 | + </constraints> | ||
| 278 | + </view> | ||
| 279 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="g3y-cV-fMg" userLabel="CouponQRContentView"> | ||
| 280 | + <rect key="frame" x="0.0" y="55" width="345" height="250"/> | ||
| 281 | + <subviews> | ||
| 282 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Zkh-qS-gYz" userLabel="CouponQRImage"> | ||
| 283 | + <rect key="frame" x="72.666666666666686" y="20" width="200" height="200"/> | ||
| 284 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 285 | + <constraints> | ||
| 286 | + <constraint firstAttribute="height" constant="200" id="HhN-a9-oG4"/> | ||
| 287 | + <constraint firstAttribute="width" constant="200" id="MAf-tL-aEA"/> | ||
| 288 | + </constraints> | ||
| 289 | + </imageView> | ||
| 290 | + </subviews> | ||
| 291 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 292 | + <constraints> | ||
| 293 | + <constraint firstItem="Zkh-qS-gYz" firstAttribute="centerX" secondItem="g3y-cV-fMg" secondAttribute="centerX" id="PnZ-55-u2G"/> | ||
| 294 | + <constraint firstAttribute="bottom" secondItem="Zkh-qS-gYz" secondAttribute="bottom" constant="30" id="WHc-Fb-R48"/> | ||
| 295 | + <constraint firstAttribute="height" constant="250" id="WnV-ph-lxQ"/> | ||
| 296 | + <constraint firstItem="Zkh-qS-gYz" firstAttribute="top" secondItem="g3y-cV-fMg" secondAttribute="top" constant="20" id="lUq-E0-XWZ"/> | ||
| 297 | + </constraints> | ||
| 298 | + </view> | ||
| 299 | + </subviews> | ||
| 300 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 301 | + <constraints> | ||
| 302 | + <constraint firstItem="g3y-cV-fMg" firstAttribute="leading" secondItem="YkU-9O-TIA" secondAttribute="leading" id="BsA-zX-5pc"/> | ||
| 303 | + <constraint firstItem="eUm-Wc-G5O" firstAttribute="top" secondItem="YkU-9O-TIA" secondAttribute="top" id="EKt-pT-pvf"/> | ||
| 304 | + <constraint firstItem="eUm-Wc-G5O" firstAttribute="leading" secondItem="YkU-9O-TIA" secondAttribute="leading" id="QN2-kp-Jes"/> | ||
| 305 | + <constraint firstAttribute="trailing" secondItem="g3y-cV-fMg" secondAttribute="trailing" id="RaR-Mz-V26"/> | ||
| 306 | + <constraint firstItem="g3y-cV-fMg" firstAttribute="top" secondItem="eUm-Wc-G5O" secondAttribute="bottom" id="a87-KC-HwB"/> | ||
| 307 | + <constraint firstAttribute="trailing" secondItem="eUm-Wc-G5O" secondAttribute="trailing" id="ci5-TU-kpQ"/> | ||
| 308 | + <constraint firstAttribute="bottom" secondItem="g3y-cV-fMg" secondAttribute="bottom" id="xVE-F8-Zzh"/> | ||
| 309 | + </constraints> | ||
| 310 | + </view> | ||
| 311 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="12M-YC-Cox" userLabel="TermsButtonView"> | ||
| 312 | + <rect key="frame" x="23.999999999999993" y="895.66666666666663" width="123.33333333333331" height="35"/> | ||
| 313 | + <subviews> | ||
| 314 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Όροι Χρήσης" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uSf-AS-iFa" userLabel="TermsButtonTitleLabel"> | ||
| 315 | + <rect key="frame" x="0.0" y="5" width="101.33333333333333" height="25"/> | ||
| 316 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
| 317 | + <nil key="textColor"/> | ||
| 318 | + <nil key="highlightedColor"/> | ||
| 319 | + </label> | ||
| 320 | + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="TeG-69-TfN" userLabel="TermsButtonArrowImage"> | ||
| 321 | + <rect key="frame" x="109.33333333333334" y="15.000000000000114" width="9" height="5"/> | ||
| 322 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 323 | + <constraints> | ||
| 324 | + <constraint firstAttribute="width" constant="9" id="Mvm-l4-0Qv"/> | ||
| 325 | + <constraint firstAttribute="height" constant="5" id="P8V-hT-LdL"/> | ||
| 326 | + </constraints> | ||
| 327 | + </imageView> | ||
| 328 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="eGV-3B-aQo" userLabel="TermsButton"> | ||
| 329 | + <rect key="frame" x="0.0" y="0.0" width="123.33333333333333" height="35"/> | ||
| 330 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 331 | + <state key="normal" title="Button"/> | ||
| 332 | + <buttonConfiguration key="configuration" style="plain" title="Button"> | ||
| 333 | + <color key="baseForegroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 334 | + </buttonConfiguration> | ||
| 335 | + </button> | ||
| 336 | + </subviews> | ||
| 337 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 338 | + <constraints> | ||
| 339 | + <constraint firstAttribute="trailing" secondItem="TeG-69-TfN" secondAttribute="trailing" constant="5" id="1nA-8b-mNq"/> | ||
| 340 | + <constraint firstItem="TeG-69-TfN" firstAttribute="leading" secondItem="uSf-AS-iFa" secondAttribute="trailing" constant="8" id="3Br-ig-6Ty"/> | ||
| 341 | + <constraint firstItem="uSf-AS-iFa" firstAttribute="leading" secondItem="12M-YC-Cox" secondAttribute="leading" id="3Yt-dW-LUF"/> | ||
| 342 | + <constraint firstAttribute="trailing" secondItem="eGV-3B-aQo" secondAttribute="trailing" id="7LJ-BO-WHh"/> | ||
| 343 | + <constraint firstItem="TeG-69-TfN" firstAttribute="centerY" secondItem="12M-YC-Cox" secondAttribute="centerY" id="CdC-4X-HfA"/> | ||
| 344 | + <constraint firstItem="eGV-3B-aQo" firstAttribute="top" secondItem="12M-YC-Cox" secondAttribute="top" id="Ibk-ZQ-b1j"/> | ||
| 345 | + <constraint firstItem="uSf-AS-iFa" firstAttribute="top" secondItem="12M-YC-Cox" secondAttribute="top" constant="5" id="MCG-6H-uMT"/> | ||
| 346 | + <constraint firstItem="eGV-3B-aQo" firstAttribute="leading" secondItem="12M-YC-Cox" secondAttribute="leading" id="S8K-hE-afS"/> | ||
| 347 | + <constraint firstAttribute="bottom" secondItem="uSf-AS-iFa" secondAttribute="bottom" constant="5" id="nJH-Wu-ZCd"/> | ||
| 348 | + <constraint firstAttribute="bottom" secondItem="eGV-3B-aQo" secondAttribute="bottom" id="sGt-sy-MSw"/> | ||
| 349 | + </constraints> | ||
| 350 | + </view> | ||
| 351 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jug-xV-lmv" userLabel="TermsLabel"> | ||
| 352 | + <rect key="frame" x="24" y="940.66666666666674" width="345" height="20.333333333333371"/> | ||
| 353 | + <constraints> | ||
| 354 | + <constraint firstAttribute="height" constant="20.329999999999998" id="9VB-9j-Q79"/> | ||
| 355 | + </constraints> | ||
| 356 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
| 357 | + <nil key="textColor"/> | ||
| 358 | + <nil key="highlightedColor"/> | ||
| 359 | + </label> | ||
| 360 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bTa-jT-Ufb" userLabel="MapButton"> | ||
| 361 | + <rect key="frame" x="24" y="1001" width="345" height="55"/> | ||
| 362 | + <constraints> | ||
| 363 | + <constraint firstAttribute="height" constant="55" id="5AV-zY-O6v"/> | ||
| 364 | + </constraints> | ||
| 365 | + <state key="normal" title="Button"/> | ||
| 366 | + <buttonConfiguration key="configuration" style="plain" title="Button"/> | ||
| 367 | + </button> | ||
| 368 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lU8-hR-MF0" userLabel="WebsiteButton"> | ||
| 369 | + <rect key="frame" x="24" y="1076" width="345" height="55"/> | ||
| 370 | + <constraints> | ||
| 371 | + <constraint firstAttribute="height" constant="55" id="aeV-F1-tWk"/> | ||
| 372 | + </constraints> | ||
| 373 | + <state key="normal" title="Button"/> | ||
| 374 | + <buttonConfiguration key="configuration" style="plain" title="Button"/> | ||
| 375 | + </button> | ||
| 376 | + </subviews> | ||
| 377 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 378 | + <constraints> | ||
| 379 | + <constraint firstAttribute="trailing" secondItem="PZ8-Go-A85" secondAttribute="trailing" constant="24" id="0BS-5a-p2w"/> | ||
| 380 | + <constraint firstAttribute="trailing" secondItem="raJ-sJ-NGX" secondAttribute="trailing" constant="16" id="3pn-zS-erd"/> | ||
| 381 | + <constraint firstAttribute="trailing" secondItem="50f-Uw-WmD" secondAttribute="trailing" id="5vF-D2-mBO"/> | ||
| 382 | + <constraint firstItem="12M-YC-Cox" firstAttribute="top" secondItem="YkU-9O-TIA" secondAttribute="bottom" constant="50" id="6cC-FH-1Xw"/> | ||
| 383 | + <constraint firstItem="50f-Uw-WmD" firstAttribute="leading" secondItem="mci-HQ-9iu" secondAttribute="leading" id="7Rd-U6-d9j"/> | ||
| 384 | + <constraint firstItem="lU8-hR-MF0" firstAttribute="leading" secondItem="mci-HQ-9iu" secondAttribute="leading" constant="24" id="9R6-Lj-xSo"/> | ||
| 385 | + <constraint firstAttribute="trailing" secondItem="29d-hw-9hc" secondAttribute="trailing" constant="24" id="A4S-YK-o00"/> | ||
| 386 | + <constraint firstItem="aSO-pm-a0W" firstAttribute="leading" secondItem="mci-HQ-9iu" secondAttribute="leading" constant="24" id="BIn-gA-oSw"/> | ||
| 387 | + <constraint firstItem="a1t-wH-dMg" firstAttribute="leading" secondItem="kQb-LM-Zaa" secondAttribute="trailing" constant="11" id="DlZ-NN-vE2"/> | ||
| 388 | + <constraint firstItem="12M-YC-Cox" firstAttribute="leading" secondItem="mci-HQ-9iu" secondAttribute="leading" constant="24" id="Eal-pm-W9t"/> | ||
| 389 | + <constraint firstItem="PZ8-Go-A85" firstAttribute="leading" secondItem="mci-HQ-9iu" secondAttribute="leading" constant="24" id="Fgh-6n-hpZ"/> | ||
| 390 | + <constraint firstAttribute="trailing" secondItem="a1t-wH-dMg" secondAttribute="trailing" constant="18" id="H8F-yd-t0Z"/> | ||
| 391 | + <constraint firstAttribute="trailing" secondItem="iWC-mi-WKw" secondAttribute="trailing" constant="24" id="HII-Zz-ySA"/> | ||
| 392 | + <constraint firstItem="iWC-mi-WKw" firstAttribute="top" secondItem="aSO-pm-a0W" secondAttribute="bottom" id="HZs-3D-vZV"/> | ||
| 393 | + <constraint firstItem="kQb-LM-Zaa" firstAttribute="leading" secondItem="aSO-pm-a0W" secondAttribute="trailing" constant="11" id="MAX-rt-Ne3"/> | ||
| 394 | + <constraint firstItem="PZ8-Go-A85" firstAttribute="top" secondItem="iWC-mi-WKw" secondAttribute="bottom" constant="14" id="PYW-1u-Cgl"/> | ||
| 395 | + <constraint firstAttribute="trailing" secondItem="bTa-jT-Ufb" secondAttribute="trailing" constant="24" id="Qcz-Xf-6ks"/> | ||
| 396 | + <constraint firstAttribute="trailing" secondItem="tOt-gP-Et5" secondAttribute="trailing" constant="24" id="TEj-0l-zzv"/> | ||
| 397 | + <constraint firstItem="bTa-jT-Ufb" firstAttribute="top" secondItem="jug-xV-lmv" secondAttribute="bottom" constant="40" id="WGs-Pa-TME"/> | ||
| 398 | + <constraint firstItem="kQb-LM-Zaa" firstAttribute="top" secondItem="50f-Uw-WmD" secondAttribute="bottom" constant="17" id="Z5G-42-yfN"/> | ||
| 399 | + <constraint firstItem="50f-Uw-WmD" firstAttribute="top" secondItem="mci-HQ-9iu" secondAttribute="top" id="a5j-3R-Mwh"/> | ||
| 400 | + <constraint firstAttribute="trailing" secondItem="jug-xV-lmv" secondAttribute="trailing" constant="24" id="b0Q-bb-wh3"/> | ||
| 401 | + <constraint firstItem="a1t-wH-dMg" firstAttribute="top" secondItem="50f-Uw-WmD" secondAttribute="bottom" constant="17" id="bSw-JI-jDV"/> | ||
| 402 | + <constraint firstItem="29d-hw-9hc" firstAttribute="leading" secondItem="mci-HQ-9iu" secondAttribute="leading" constant="24" id="cGC-SD-gUM"/> | ||
| 403 | + <constraint firstItem="iWC-mi-WKw" firstAttribute="leading" secondItem="mci-HQ-9iu" secondAttribute="leading" constant="24" id="dMq-cH-vOX"/> | ||
| 404 | + <constraint firstItem="raJ-sJ-NGX" firstAttribute="top" secondItem="mci-HQ-9iu" secondAttribute="top" constant="17" id="g7b-Ql-ifv"/> | ||
| 405 | + <constraint firstItem="lU8-hR-MF0" firstAttribute="top" secondItem="bTa-jT-Ufb" secondAttribute="bottom" constant="20" id="hGL-sc-uEw"/> | ||
| 406 | + <constraint firstItem="YkU-9O-TIA" firstAttribute="top" secondItem="29d-hw-9hc" secondAttribute="bottom" constant="23" id="igh-S5-wVl"/> | ||
| 407 | + <constraint firstItem="aSO-pm-a0W" firstAttribute="top" secondItem="50f-Uw-WmD" secondAttribute="bottom" constant="23" id="jvc-rb-E6b"/> | ||
| 408 | + <constraint firstItem="tOt-gP-Et5" firstAttribute="top" secondItem="PZ8-Go-A85" secondAttribute="bottom" constant="20" id="kQ3-4v-3Jp"/> | ||
| 409 | + <constraint firstItem="jug-xV-lmv" firstAttribute="top" secondItem="12M-YC-Cox" secondAttribute="bottom" constant="9.9999999999998863" id="kSx-qT-pPa"/> | ||
| 410 | + <constraint firstAttribute="bottom" secondItem="lU8-hR-MF0" secondAttribute="bottom" constant="46" id="l1j-ca-Uq9"/> | ||
| 411 | + <constraint firstAttribute="trailing" secondItem="lU8-hR-MF0" secondAttribute="trailing" constant="24" id="lEm-My-Oi9"/> | ||
| 412 | + <constraint firstItem="bTa-jT-Ufb" firstAttribute="leading" secondItem="mci-HQ-9iu" secondAttribute="leading" constant="24" id="nR2-Py-LTi"/> | ||
| 413 | + <constraint firstItem="jug-xV-lmv" firstAttribute="leading" secondItem="mci-HQ-9iu" secondAttribute="leading" constant="24" id="oUa-cz-J7N"/> | ||
| 414 | + <constraint firstAttribute="trailing" secondItem="YkU-9O-TIA" secondAttribute="trailing" constant="24" id="qPb-Zk-uAy"/> | ||
| 415 | + <constraint firstItem="YkU-9O-TIA" firstAttribute="leading" secondItem="mci-HQ-9iu" secondAttribute="leading" constant="24" id="qaA-KW-dD7"/> | ||
| 416 | + <constraint firstItem="29d-hw-9hc" firstAttribute="top" secondItem="tOt-gP-Et5" secondAttribute="bottom" constant="34" id="xG9-Pc-sWu"/> | ||
| 417 | + <constraint firstItem="tOt-gP-Et5" firstAttribute="leading" secondItem="mci-HQ-9iu" secondAttribute="leading" constant="24" id="xz5-C4-0GD"/> | ||
| 418 | + </constraints> | ||
| 419 | + </view> | ||
| 420 | + </subviews> | ||
| 421 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 422 | + <constraints> | ||
| 423 | + <constraint firstItem="mci-HQ-9iu" firstAttribute="top" secondItem="h4g-s9-7SF" secondAttribute="top" id="03G-xq-Mcz"/> | ||
| 424 | + <constraint firstItem="mci-HQ-9iu" firstAttribute="trailing" secondItem="h4g-s9-7SF" secondAttribute="trailing" id="GPq-Ja-g8u"/> | ||
| 425 | + <constraint firstItem="mci-HQ-9iu" firstAttribute="leading" secondItem="h4g-s9-7SF" secondAttribute="leading" id="MEM-3Q-VXV"/> | ||
| 426 | + <constraint firstItem="mci-HQ-9iu" firstAttribute="bottom" secondItem="h4g-s9-7SF" secondAttribute="bottom" id="qUk-qX-b3J"/> | ||
| 427 | + <constraint firstItem="mci-HQ-9iu" firstAttribute="width" secondItem="VdI-CU-gtr" secondAttribute="width" id="r9B-kb-TPd"/> | ||
| 428 | + </constraints> | ||
| 429 | + <viewLayoutGuide key="contentLayoutGuide" id="h4g-s9-7SF"/> | ||
| 430 | + <viewLayoutGuide key="frameLayoutGuide" id="VdI-CU-gtr"/> | ||
| 431 | + </scrollView> | ||
| 432 | + </subviews> | ||
| 433 | + <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/> | ||
| 434 | + <constraints> | ||
| 435 | + <constraint firstAttribute="trailing" secondItem="GDr-bX-h2w" secondAttribute="trailing" id="6Rw-Bg-NO4"/> | ||
| 436 | + <constraint firstItem="mci-HQ-9iu" firstAttribute="height" relation="greaterThanOrEqual" secondItem="SHO-CC-9Fd" secondAttribute="height" id="MbQ-SS-x84"/> | ||
| 437 | + <constraint firstItem="GDr-bX-h2w" firstAttribute="leading" secondItem="SHO-CC-9Fd" secondAttribute="leading" id="MlF-Ct-Ncs"/> | ||
| 438 | + <constraint firstAttribute="bottom" secondItem="GDr-bX-h2w" secondAttribute="bottom" id="ffd-WV-jyV"/> | ||
| 439 | + <constraint firstItem="GDr-bX-h2w" firstAttribute="top" secondItem="SHO-CC-9Fd" secondAttribute="top" id="o5D-CB-c8M"/> | ||
| 440 | + </constraints> | ||
| 441 | + </view> | ||
| 442 | + </subviews> | ||
| 443 | + <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> | ||
| 444 | + <color key="backgroundColor" systemColor="systemBackgroundColor"/> | ||
| 445 | + <constraints> | ||
| 446 | + <constraint firstItem="SHO-CC-9Fd" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="HgA-qe-JaT"/> | ||
| 447 | + <constraint firstItem="SHO-CC-9Fd" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="c1X-3g-JjK"/> | ||
| 448 | + <constraint firstAttribute="trailing" secondItem="SHO-CC-9Fd" secondAttribute="trailing" id="g67-1Q-pk8"/> | ||
| 449 | + <constraint firstAttribute="bottom" secondItem="SHO-CC-9Fd" secondAttribute="bottom" id="tcy-z9-Apq"/> | ||
| 450 | + </constraints> | ||
| 451 | + <point key="canvasLocation" x="141" y="154"/> | ||
| 452 | + </view> | ||
| 453 | + </objects> | ||
| 454 | + <resources> | ||
| 455 | + <systemColor name="systemBackgroundColor"> | ||
| 456 | + <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
| 457 | + </systemColor> | ||
| 458 | + </resources> | ||
| 459 | +</document> |
| ... | @@ -566,6 +566,13 @@ import UIKit | ... | @@ -566,6 +566,13 @@ import UIKit |
| 566 | print("CouponViewController navigation commented out - will handle later") | 566 | print("CouponViewController navigation commented out - will handle later") |
| 567 | } | 567 | } |
| 568 | 568 | ||
| 569 | + private func openCouponsetViewController(with couponSet: CouponSetItemModel) { | ||
| 570 | + let vc = SwiftWarplyFramework.CouponsetViewController(nibName: "CouponsetViewController", bundle: Bundle.frameworkBundle) | ||
| 571 | + vc.couponSet = couponSet | ||
| 572 | + | ||
| 573 | + self.navigationController?.pushViewController(vc, animated: true) | ||
| 574 | + } | ||
| 575 | + | ||
| 569 | private func openProfileViewController() { | 576 | private func openProfileViewController() { |
| 570 | let vc = SwiftWarplyFramework.ProfileViewController(nibName: "ProfileViewController", bundle: Bundle.frameworkBundle) | 577 | let vc = SwiftWarplyFramework.ProfileViewController(nibName: "ProfileViewController", bundle: Bundle.frameworkBundle) |
| 571 | 578 | ||
| ... | @@ -680,7 +687,6 @@ extension MyRewardsViewController: MyRewardsOffersScrollTableViewCellDelegate { | ... | @@ -680,7 +687,6 @@ extension MyRewardsViewController: MyRewardsOffersScrollTableViewCellDelegate { |
| 680 | } | 687 | } |
| 681 | 688 | ||
| 682 | func didSelectCouponSet(_ couponSet: CouponSetItemModel) { | 689 | func didSelectCouponSet(_ couponSet: CouponSetItemModel) { |
| 683 | - // New logic for CouponSetItemModel - will handle navigation later | 690 | + openCouponsetViewController(with: couponSet) |
| 684 | - print("CouponSet selected: \(couponSet._name)") | ||
| 685 | } | 691 | } |
| 686 | } | 692 | } | ... | ... |
-
Please register or login to post a comment