Skip to content

Instantly share code, notes, and snippets.

@NikAshanin
Last active April 26, 2017 18:39
Show Gist options
  • Select an option

  • Save NikAshanin/bdf016a03ec1403d9223d00a9952f802 to your computer and use it in GitHub Desktop.

Select an option

Save NikAshanin/bdf016a03ec1403d9223d00a9952f802 to your computer and use it in GitHub Desktop.
import UIKit
import RxSwift
import RxCocoa
final class LoadingBarButton {
fileprivate weak var navigationItem: UINavigationItem?
fileprivate var initialBarButton: UIBarButtonItem?
init(navigationItem: UINavigationItem) {
self.navigationItem = navigationItem
self.initialBarButton = navigationItem.rightBarButtonItem
}
fileprivate func setState(waiting: Bool = false) {
if waiting {
let activityIndicatorItem = UIBarButtonItem.activityIndicator
navigationItem?.rightBarButtonItem = activityIndicatorItem.barButton
activityIndicatorItem.activityIndicator.startAnimating()
} else {
navigationItem?.rightBarButtonItem = initialBarButton
}
}
}
extension Observable {
func changeLoadingUI(using barButton: LoadingBarButton) -> Observable<Observable.E> {
return observeOn(MainScheduler.instance)
.do(onSubscribe: {
barButton.setState(waiting: true)
}, onDispose: {
barButton.setState(waiting: false)
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment