CheckImageButton.swift 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. //
  2. // CheckImageButton.swift
  3. // hulan
  4. //
  5. // Created by Taeyong An on 01/11/2018.
  6. // Copyright © 2018 Taeyong An. All rights reserved.
  7. //
  8. import Foundation
  9. import UIKit
  10. import ReactiveSwift
  11. import ReactiveCocoa
  12. struct AssociatedKeys {
  13. static var isChecked: Bool = false
  14. static var state: String = ""
  15. static var checkOnImg: String = ""
  16. static var checkOffImg: String = ""
  17. }
  18. class CheckImageButton: UIImageView {
  19. var isChecked: Bool {
  20. get {
  21. guard let value = objc_getAssociatedObject(self, &AssociatedKeys.isChecked) as? Bool else {
  22. return false
  23. }
  24. return value
  25. }
  26. set(newValue) {
  27. objc_setAssociatedObject(self, &AssociatedKeys.isChecked, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
  28. if newValue, self.checkOnImg != ""{
  29. self.image = UIImage(named: self.checkOnImg)
  30. }else if self.checkOffImg != ""{
  31. self.image = UIImage(named: self.checkOffImg)
  32. }
  33. }
  34. }
  35. var state: String {
  36. get {
  37. guard let value = objc_getAssociatedObject(self, &AssociatedKeys.state) as? String else {
  38. return ""
  39. }
  40. return value
  41. }
  42. set(newValue) {
  43. objc_setAssociatedObject(self, &AssociatedKeys.state, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
  44. }
  45. }
  46. var checkOnImg:String{
  47. get {
  48. guard let value = objc_getAssociatedObject(self, &AssociatedKeys.checkOffImg) as? String else {
  49. return ""
  50. }
  51. return value
  52. }
  53. set(newValue) {
  54. objc_setAssociatedObject(self, &AssociatedKeys.checkOffImg, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
  55. }
  56. }
  57. var checkOffImg:String{
  58. get {
  59. guard let value = objc_getAssociatedObject(self, &AssociatedKeys.checkOnImg) as? String else {
  60. return ""
  61. }
  62. return value
  63. }
  64. set(newValue) {
  65. objc_setAssociatedObject(self, &AssociatedKeys.checkOnImg, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
  66. }
  67. }
  68. func toggle(){
  69. self.isChecked = !self.isChecked
  70. }
  71. @IBInspectable
  72. var checked: Bool {
  73. get {
  74. return self.isChecked
  75. }
  76. set {
  77. self.isChecked = newValue
  78. }
  79. }
  80. @IBInspectable
  81. var status: String {
  82. get {
  83. return self.state
  84. }
  85. set {
  86. self.state = newValue
  87. }
  88. }
  89. @IBInspectable
  90. var checkOn: String {
  91. get {
  92. return self.checkOnImg
  93. }
  94. set {
  95. self.checkOnImg = newValue
  96. }
  97. }
  98. @IBInspectable
  99. var checkOff: String {
  100. get {
  101. return self.checkOffImg
  102. }
  103. set {
  104. self.checkOffImg = newValue
  105. }
  106. }
  107. }
  108. extension Reactive where Base: CheckImageButton {
  109. var checked:BindingTarget<Bool> {
  110. return makeBindingTarget { $0.checked = $1 }
  111. }
  112. }