Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save mitsuse/13535034be747ea8ee4c4ad9de0a9d03 to your computer and use it in GitHub Desktop.

Select an option

Save mitsuse/13535034be747ea8ee4c4ad9de0a9d03 to your computer and use it in GitHub Desktop.

Revisions

  1. mitsuse created this gist Mar 2, 2018.
    28 changes: 28 additions & 0 deletions MakeTitleViewFirstResponderByTouchingTabTwice.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,28 @@
    import UIKit

    import RxCocoa
    import RxSwift

    final class TabBarController: UITabBarController {
    private let disposeBag = DisposeBag()

    override func viewDidLoad() {
    super.viewDidLoad()

    rx.didSelect
    .withPrevious()
    .subscribe(onNext: { previous, next in
    guard previous == next, let topViewController = (next as? UINavigationController)?.topViewController else { return }
    topViewController.navigationItem.titleView?.becomeFirstResponder()
    })
    .disposed(by: disposeBag)
    }
    }

    extension ObservableType {
    public func withPrevious() -> Observable<(E?, E?)> {
    return self
    .scan((nil, nil)) { state, next in let (_, previous) = state; return (previous, next) }
    .skip(1)
    }
    }