fix PaginationWrapper retry button showing

This commit is contained in:
Ivan Smolin 2018-05-24 17:22:19 +03:00
parent 3931c09d7f
commit 1d21338de9
4 changed files with 33 additions and 16 deletions

View File

@ -1,5 +1,8 @@
# Changelog
### 0.7.19
- **Fix**: `PaginationWrapper` retry button showing.
### 0.7.18
- **Update**: default implementation of `PaginationWrapperUIDelegate`.

View File

@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "LeadKit"
s.version = "0.7.18"
s.version = "0.7.19"
s.summary = "iOS framework with a bunch of tools for rapid development"
s.homepage = "https://github.com/TouchInstinct/LeadKit"
s.license = "Apache License, Version 2.0"

View File

@ -33,6 +33,8 @@ final public class PaginationWrapper<Cursor: ResettableRxDataSourceCursor, Deleg
private typealias LoadingState = DataLoadingModel.NetworkOperationStateType
private typealias FinishInfiniteScrollCompletion = ((UIScrollView) -> Void)
private var wrappedView: AnyPaginationWrappable
private let paginationViewModel: DataLoadingModel
private weak var delegate: Delegate?
@ -186,14 +188,15 @@ final public class PaginationWrapper<Cursor: ResettableRxDataSourceCursor, Deleg
replacePlaceholderViewIfNeeded(with: errorView)
} else if case .loadingMore = afterState {
removeInfiniteScroll()
guard let retryButton = uiDelegate?.footerRetryButton(),
let retryButtonHeigth = uiDelegate?.footerRetryButtonHeight() else {
let retryButtonHeight = uiDelegate?.footerRetryButtonHeight() else {
removeInfiniteScroll()
return
}
retryButton.frame = CGRect(x: 0, y: 0, width: wrappedView.scrollView.bounds.width, height: retryButtonHeigth)
retryButton.frame = CGRect(x: 0, y: 0, width: wrappedView.scrollView.bounds.width, height: retryButtonHeight)
retryButton.rx
.controlEvent(.touchUpInside)
@ -203,7 +206,13 @@ final public class PaginationWrapper<Cursor: ResettableRxDataSourceCursor, Deleg
uiDelegate?.footerRetryButtonWillAppear()
wrappedView.footerView = retryButton
removeInfiniteScroll { scrollView in
self.wrappedView.footerView = retryButton
let newContentOffset = CGPoint(x: 0, y: scrollView.contentOffset.y + retryButtonHeight)
scrollView.setContentOffset(newContentOffset, animated: true)
}
}
}
@ -272,8 +281,8 @@ final public class PaginationWrapper<Cursor: ResettableRxDataSourceCursor, Deleg
wrappedView.scrollView.infiniteScrollIndicatorView = uiDelegate?.loadingMoreIndicator()?.view
}
private func removeInfiniteScroll() {
wrappedView.scrollView.finishInfiniteScroll()
private func removeInfiniteScroll(with completion: FinishInfiniteScrollCompletion? = nil) {
wrappedView.scrollView.finishInfiniteScroll(completion: completion)
wrappedView.scrollView.removeInfiniteScroll()
}

View File

@ -26,10 +26,11 @@ import UIKit
public final class AnyPaginationWrappable: PaginationWrappable {
private typealias ViewSetter = (UIView?) -> Void
private typealias ViewGetter = () -> UIView?
public var footerView: UIView? {
get {
return footerViewBacking
return footerViewGetter()
}
set {
footerViewSetter(newValue)
@ -38,7 +39,7 @@ public final class AnyPaginationWrappable: PaginationWrappable {
public var backgroundView: UIView? {
get {
return backgroundViewBacking
return backgroundViewGetter()
}
set {
backgroundViewSetter(newValue)
@ -47,26 +48,30 @@ public final class AnyPaginationWrappable: PaginationWrappable {
public let scrollView: UIScrollView
private let backgroundViewBacking: UIView?
private let footerViewBacking: UIView?
private let backgroundViewSetter: ViewSetter
private let footerViewSetter: ViewSetter
public init<View>(view: View) where View: PaginationWrappable {
private let backgroundViewGetter: ViewGetter
private let footerViewGetter: ViewGetter
public init<View: PaginationWrappable>(view: View) {
self.scrollView = view.scrollView
self.backgroundViewBacking = view.backgroundView
self.footerViewBacking = view.footerView
var localView = view
self.backgroundViewSetter = {
localView.backgroundView = $0
}
self.backgroundViewGetter = {
localView.backgroundView
}
self.footerViewSetter = {
localView.footerView = $0
}
self.footerViewGetter = {
localView.footerView
}
}
}