🧑💻/Swift
RxSwift selectedSegmentIndex 연동 안되는 문제
유리맥
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)
...
}
참고
반응형