-
RxSwift selectedSegmentIndex 연동 안되는 문제🧑💻/Swift 2021. 7. 22. 13:51반응형
UISegmentedControl의 selectedSegmentIndex 값을 직접 변경 시 valueChanged 이벤트를 전송해야 합니다.
segctrlTime.selectedSegmentIndex = 0 segctrlTime.sendActions(for: .valueChanged)
⬇️ 자세히 보기 ⬇️
UISegmentedControl의 selectedSegmentIndex 값에 따라 다른 화면을 표시해주기 위해 아래와 같이 RxCocoa를 사용해서 비동기 처리를 했습니다.
/* 두번째 화면의 ViewController */ override func viewDidLoad() { super.viewDidLoad() ... segctrlTime.rx.selectedSegmentIndex .observe(on: MainScheduler.instance) .map { return ($0 == self.scheduled ? false : true) } .subscribe(onNext: { self.viewTaskDetails.subviews[0].isHidden = $0 self.viewTaskDetails.subviews[1].isHidden = $0 }) .disposed(by: disposeBag) ... } override func viewWillAppear(_ animated: Bool) { ... // Scheduled / Anytime if let date = task.date, !date.isEmpty { segctrlTime.selectedSegmentIndex = scheduled } else { segctrlTime.selectedSegmentIndex = anytime } ... }
Schduled 작업은 날짜/시간을 선택할 수 있고, Anytime 작업은 시간 값이 필요없습니다.
Anytime Cell 선택 시 selectedSegmentIndex에 anytime(value: 1) 값을 지정해줬습니다.
그런데 날짜/시간 View가 여전히 표시됩니다.UISegmentedControl에게 값이 변경되었다는 Action을 전송하여 문제를 해결할 수 있었습니다.
override func viewWillAppear(_ animated: Bool) { ... // Scheduled / Anytime if let date = task.date, !date.isEmpty { segctrlTime.selectedSegmentIndex = scheduled } else { segctrlTime.selectedSegmentIndex = anytime } // 값 변경됨 Action 전송 segctrlTime.sendActions(for: .valueChanged) ... }
참고
반응형