From 1bd4d3d960ed32f619f82bc1674276721adef36a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanpe=20Catala=CC=81n?= Date: Wed, 9 Sep 2020 16:49:40 +0200 Subject: [PATCH 1/2] feat: save and restore button view state --- Example/TableView/Base.lproj/Main.storyboard | 23 ++++++++++++++---- Sources/Extensions/UIView+Extension.swift | 1 + .../Helpers/PrepareForSkeletonProtocol.swift | 10 ++++++++ Sources/Recoverable/Recoverable.swift | 24 +++++++++++++++++-- .../Recoverable/RecoverableViewState.swift | 10 ++++++++ 5 files changed, 62 insertions(+), 6 deletions(-) diff --git a/Example/TableView/Base.lproj/Main.storyboard b/Example/TableView/Base.lproj/Main.storyboard index 14f46e3c..93a21f9c 100644 --- a/Example/TableView/Base.lproj/Main.storyboard +++ b/Example/TableView/Base.lproj/Main.storyboard @@ -1,9 +1,9 @@ - + - + @@ -39,7 +39,7 @@ - + @@ -49,13 +49,28 @@ + - + + + diff --git a/Sources/Extensions/UIView+Extension.swift b/Sources/Extensions/UIView+Extension.swift index fc766ebe..aa21157a 100644 --- a/Sources/Extensions/UIView+Extension.swift +++ b/Sources/Extensions/UIView+Extension.swift @@ -12,6 +12,7 @@ enum ViewAssociatedKeys { static var viewState = "viewState" static var labelViewState = "labelViewState" static var imageViewState = "imageViewState" + static var buttonViewState = "buttonViewState" static var currentSkeletonConfig = "currentSkeletonConfig" static var skeletonCornerRadius = "skeletonCornerRadius" } diff --git a/Sources/Helpers/PrepareForSkeletonProtocol.swift b/Sources/Helpers/PrepareForSkeletonProtocol.swift index 2d7e1245..9e749f3c 100755 --- a/Sources/Helpers/PrepareForSkeletonProtocol.swift +++ b/Sources/Helpers/PrepareForSkeletonProtocol.swift @@ -44,3 +44,13 @@ extension UIImageView { } } } + +extension UIButton { + override func prepareViewForSkeleton() { + backgroundColor = .clear + startTransition { [weak self] in + self?.setTitle(nil, for: .normal) + self?.isUserInteractionEnabled = false + } + } +} diff --git a/Sources/Recoverable/Recoverable.swift b/Sources/Recoverable/Recoverable.swift index 9b6a49ca..5d851b37 100644 --- a/Sources/Recoverable/Recoverable.swift +++ b/Sources/Recoverable/Recoverable.swift @@ -37,7 +37,7 @@ extension UIView: Recoverable { } } -extension UILabel{ +extension UILabel { var labelState: RecoverableTextViewState? { get { return ao_get(pkey: &ViewAssociatedKeys.labelViewState) as? RecoverableTextViewState } set { ao_setOptional(newValue, pkey: &ViewAssociatedKeys.labelViewState) } @@ -58,7 +58,7 @@ extension UILabel{ } } -extension UITextView{ +extension UITextView { var textState: RecoverableTextViewState? { get { return ao_get(pkey: &ViewAssociatedKeys.labelViewState) as? RecoverableTextViewState } set { ao_setOptional(newValue, pkey: &ViewAssociatedKeys.labelViewState) } @@ -97,3 +97,23 @@ extension UIImageView { } } } + +extension UIButton { + var buttonState: RecoverableButtonViewState? { + get { return ao_get(pkey: &ViewAssociatedKeys.buttonViewState) as? RecoverableButtonViewState } + set { ao_setOptional(newValue, pkey: &ViewAssociatedKeys.buttonViewState) } + } + + override func saveViewState() { + super.saveViewState() + buttonState = RecoverableButtonViewState(view: self) + } + + override func recoverViewState(forced: Bool) { + super.recoverViewState(forced: forced) + startTransition { [weak self] in + self?.setTitle(self?.buttonState?.title, for: .normal) + self?.isUserInteractionEnabled = self?.buttonState?.isUserInteractionsEnabled ?? false + } + } +} diff --git a/Sources/Recoverable/RecoverableViewState.swift b/Sources/Recoverable/RecoverableViewState.swift index 64b2af03..48edb4f3 100644 --- a/Sources/Recoverable/RecoverableViewState.swift +++ b/Sources/Recoverable/RecoverableViewState.swift @@ -45,3 +45,13 @@ struct RecoverableImageViewState { self.image = view.image } } + +struct RecoverableButtonViewState { + var title: String? + var isUserInteractionsEnabled: Bool + + init(view: UIButton) { + self.title = view.titleLabel?.text + self.isUserInteractionsEnabled = view.isUserInteractionEnabled + } +} From 4167579d8a2369338951fe3624673a55faa71040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanpe=20Catala=CC=81n?= Date: Wed, 9 Sep 2020 17:31:34 +0200 Subject: [PATCH 2/2] add PR in the CHANGELOG file --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3deb47fd..8ddcf4aa 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,9 @@ All notable changes to this project will be documented in this file ### Next version #### 🩹 Bug fixes -* [**320**](https://github.com/Juanpe/SkeletonView/pull/320): Fix Single line customisation - [@Juanpe](https://github.com/juanpe) * [**319**](https://github.com/Juanpe/SkeletonView/pull/319): Fix to consider the top and bottom edge insets when updating the skeleton layer height - [@xpereta](https://github.com/xpereta) +* [**320**](https://github.com/Juanpe/SkeletonView/pull/320): Fix Single line customisation - [@Juanpe](https://github.com/juanpe) +* [**323**](https://github.com/Juanpe/SkeletonView/pull/323): Save and restore view state for UIButton - [@Juanpe](https://github.com/juanpe) ## 📦 [1.8.8](https://github.com/Juanpe/SkeletonView/releases/tag/1.8.8)