RxSwift/RxCocoa/iOS/UIBarButtonItem+Rx.swift

59 lines
1.2 KiB
Swift
Raw Normal View History

//
// UIBarButtonItem.swift
// RxCocoa
//
// Created by Daniel Tartaglia on 5/31/15.
// Copyright (c) 2015 Krunoslav Zaher. All rights reserved.
//
import UIKit
2015-08-01 16:13:26 +03:00
#if !RX_NO_MODULE
import RxSwift
2015-08-01 16:13:26 +03:00
#endif
extension UIBarButtonItem {
public var rx_tap: Observable<Void> {
return AnonymousObservable { observer in
let target = BarButtonItemTarget(barButtonItem: self) {
sendNext(observer, ())
}
return target
} .takeUntil(rx_deallocated)
}
}
2015-07-22 12:39:48 +03:00
class BarButtonItemTarget: Disposable {
typealias Callback = () -> Void
weak var barButtonItem: UIBarButtonItem?
var callback: Callback!
init(barButtonItem: UIBarButtonItem, callback: () -> Void) {
self.barButtonItem = barButtonItem
self.callback = callback
barButtonItem.target = self
barButtonItem.action = Selector("action:")
}
deinit {
dispose()
}
func dispose() {
MainScheduler.ensureExecutingOnScheduler()
barButtonItem?.target = nil
barButtonItem?.action = nil
callback = nil
}
func action(sender: AnyObject) {
callback()
}
}