From aba717b642cd66c0e86bf1707e45f1a0d0458428 Mon Sep 17 00:00:00 2001 From: Kyle Fuller Date: Fri, 27 May 2016 18:41:50 -0700 Subject: [PATCH] Add rx_title to UIViewController --- CHANGELOG.md | 7 +++++ Rx.xcodeproj/project.pbxproj | 14 +++++++-- RxCocoa/iOS/UIViewController+Rx.swift | 29 +++++++++++++++++++ .../UIViewControler+RxTests.swift | 24 +++++++++++++++ 4 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 RxCocoa/iOS/UIViewController+Rx.swift create mode 100644 Tests/RxCocoaTests/UIViewControler+RxTests.swift diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d061cb9..37cc6150 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. --- +## Master + +#### Features + +* Adds `rx_title` to `UIViewController`. + + ## [2.5.0](https://github.com/ReactiveX/RxSwift/releases/tag/2.5.0) #### Features diff --git a/Rx.xcodeproj/project.pbxproj b/Rx.xcodeproj/project.pbxproj index fc3427d5..3effdde6 100644 --- a/Rx.xcodeproj/project.pbxproj +++ b/Rx.xcodeproj/project.pbxproj @@ -7,14 +7,16 @@ objects = { /* Begin PBXBuildFile section */ - 46307D4E1CDE77D800E47A1C /* UIAlertAction+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46307D4D1CDE77D800E47A1C /* UIAlertAction+Rx.swift */; }; - 46307D4F1CDE77D800E47A1C /* UIAlertAction+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46307D4D1CDE77D800E47A1C /* UIAlertAction+Rx.swift */; }; 1AF67DA21CED420A00C310FA /* PublishSubjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AF67DA11CED420A00C310FA /* PublishSubjectTest.swift */; }; 1AF67DA31CED427D00C310FA /* PublishSubjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AF67DA11CED420A00C310FA /* PublishSubjectTest.swift */; }; 1AF67DA41CED427D00C310FA /* PublishSubjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AF67DA11CED420A00C310FA /* PublishSubjectTest.swift */; }; 1AF67DA61CED430100C310FA /* ReplaySubjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AF67DA51CED430100C310FA /* ReplaySubjectTest.swift */; }; 1AF67DA71CED430100C310FA /* ReplaySubjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AF67DA51CED430100C310FA /* ReplaySubjectTest.swift */; }; 1AF67DA81CED430100C310FA /* ReplaySubjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AF67DA51CED430100C310FA /* ReplaySubjectTest.swift */; }; + 271A97411CFC996B00D64125 /* UIViewController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271A97401CFC996B00D64125 /* UIViewController+Rx.swift */; }; + 271A97441CFC9F7B00D64125 /* UIViewControler+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 271A97421CFC99FE00D64125 /* UIViewControler+RxTests.swift */; }; + 46307D4E1CDE77D800E47A1C /* UIAlertAction+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46307D4D1CDE77D800E47A1C /* UIAlertAction+Rx.swift */; }; + 46307D4F1CDE77D800E47A1C /* UIAlertAction+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46307D4D1CDE77D800E47A1C /* UIAlertAction+Rx.swift */; }; 54700CA01CE37E1800EF3A8F /* UINavigationItem+RxTests.swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54700C9E1CE37D1000EF3A8F /* UINavigationItem+RxTests.swift.swift */; }; 54700CA11CE37E1900EF3A8F /* UINavigationItem+RxTests.swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54700C9E1CE37D1000EF3A8F /* UINavigationItem+RxTests.swift.swift */; }; 54D2138E1CE0824E0028D5B4 /* UINavigationItem+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54D2138C1CE081890028D5B4 /* UINavigationItem+Rx.swift */; }; @@ -1371,9 +1373,11 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 46307D4D1CDE77D800E47A1C /* UIAlertAction+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIAlertAction+Rx.swift"; sourceTree = ""; }; 1AF67DA11CED420A00C310FA /* PublishSubjectTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PublishSubjectTest.swift; sourceTree = ""; }; 1AF67DA51CED430100C310FA /* ReplaySubjectTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReplaySubjectTest.swift; sourceTree = ""; }; + 271A97401CFC996B00D64125 /* UIViewController+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+Rx.swift"; sourceTree = ""; }; + 271A97421CFC99FE00D64125 /* UIViewControler+RxTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewControler+RxTests.swift"; sourceTree = ""; }; + 46307D4D1CDE77D800E47A1C /* UIAlertAction+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIAlertAction+Rx.swift"; sourceTree = ""; }; 54700C9E1CE37D1000EF3A8F /* UINavigationItem+RxTests.swift.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UINavigationItem+RxTests.swift.swift"; sourceTree = ""; }; 54D2138C1CE081890028D5B4 /* UINavigationItem+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UINavigationItem+Rx.swift"; sourceTree = ""; }; 79E9DE881C3417FD009970AF /* DispatchQueueSchedulerQOS.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DispatchQueueSchedulerQOS.swift; sourceTree = ""; }; @@ -2282,6 +2286,7 @@ C83508EF1C38706D0027C24C /* RxTests-tvOS-Bridging-Header.h */, C83508F01C38706D0027C24C /* SentMessageTest.swift */, C83508F11C38706D0027C24C /* UIView+RxTests.swift */, + 271A97421CFC99FE00D64125 /* UIViewControler+RxTests.swift */, 7F600F421C5D0D2D00535B1D /* UIRefreshControl+RxTests.swift */, 7EDBAEAB1C89B1A5006CBE67 /* UITabBarItem+RxTests.swift */, C8B2908C1C94D6C500E923D0 /* UISearchBar+RxTests.swift */, @@ -2410,6 +2415,7 @@ C88253F91B8A752B00B02D69 /* Proxies */, C88254051B8A752B00B02D69 /* UIBarButtonItem+Rx.swift */, C839365E1C70E02200A9A09E /* UIApplication+Rx.swift */, + 271A97401CFC996B00D64125 /* UIViewController+Rx.swift */, C88254061B8A752B00B02D69 /* UIButton+Rx.swift */, C88254071B8A752B00B02D69 /* UICollectionView+Rx.swift */, C88254081B8A752B00B02D69 /* UIControl+Rx.swift */, @@ -3366,6 +3372,7 @@ C8093EED1B8A732E0088E94D /* KVOObservable.swift in Sources */, D2F461021CD7AC1F00527B4D /* Reactive.swift in Sources */, AAE623761C82475700FC7801 /* UIProgressView+Rx.swift in Sources */, + 271A97411CFC996B00D64125 /* UIViewController+Rx.swift in Sources */, C8DB968D1BF7595D0084BD53 /* KVORepresentable+Swift.swift in Sources */, C80DDEB11BCE8CA3006A1832 /* Driver+Operators+arity.swift in Sources */, C88254281B8A752B00B02D69 /* UIButton+Rx.swift in Sources */, @@ -3535,6 +3542,7 @@ C83509601C38706E0027C24C /* Observable+TimeTest.swift in Sources */, C835093F1C38706E0027C24C /* ElementIndexPair.swift in Sources */, C83509381C38706E0027C24C /* NSObject+RxTests.swift in Sources */, + 271A97441CFC9F7B00D64125 /* UIViewControler+RxTests.swift in Sources */, C83509631C38706E0027C24C /* SubjectConcurrencyTest.swift in Sources */, 84E4D3961C9B011000ADFDC9 /* UISearchController+RxTests.swift in Sources */, C83509511C38706E0027C24C /* HistoricalSchedulerTest.swift in Sources */, diff --git a/RxCocoa/iOS/UIViewController+Rx.swift b/RxCocoa/iOS/UIViewController+Rx.swift new file mode 100644 index 00000000..02c5d2db --- /dev/null +++ b/RxCocoa/iOS/UIViewController+Rx.swift @@ -0,0 +1,29 @@ +// +// UIViewController+Rx.swift +// Rx +// +// Created by Kyle Fuller on 27/05/2016. +// Copyright © 2016 Krunoslav Zaher. All rights reserved. +// + +import Foundation + +#if os(iOS) + import UIKit + +#if !RX_NO_MODULE + import RxSwift +#endif + + extension UIViewController { + + /** + Bindable sink for `title`. + */ + public var rx_title: AnyObserver { + return UIBindingObserver(UIElement: self) { viewController, title in + viewController.title = title + }.asObserver() + } + } +#endif \ No newline at end of file diff --git a/Tests/RxCocoaTests/UIViewControler+RxTests.swift b/Tests/RxCocoaTests/UIViewControler+RxTests.swift new file mode 100644 index 00000000..15d1a1fc --- /dev/null +++ b/Tests/RxCocoaTests/UIViewControler+RxTests.swift @@ -0,0 +1,24 @@ +// +// UIViewControler+RxTests.swift +// Rx +// +// Created by Kyle Fuller on 30/05/2016. +// Copyright © 2016 Krunoslav Zaher. All rights reserved. +// + +import Foundation + +import RxSwift +import RxCocoa +import UIKit +import XCTest + +class UITViewControllerTests : RxTest { + func testRxTitle() { + let viewController = UIViewController() + + _ = Observable.just("title").bindTo(viewController.rx_title) + + XCTAssertEqual("title", viewController.title) + } +} \ No newline at end of file