study record

[iOS] 코드로 네비게이션 컨트롤러 설정 및 Rx 버튼클릭 이벤트( 화면 전환 ) 본문

iOS/iOS 정리

[iOS] 코드로 네비게이션 컨트롤러 설정 및 Rx 버튼클릭 이벤트( 화면 전환 )

asong 2022. 2. 16. 17:02

rx를 활용해서 네비게이션을 하려는 과정에서 네비게이션 컨트롤러를 활용하는 것이 잘 작동하지 않았다. (코드로 UI를 구성 중이다.)

 

이 블로그를 참고하여 해결하였다.

https://iamcho2.github.io/2021/03/28/navigation-controller-initial-setting

 

SceneDelegate에

var window: UIWindow?
    var navigationController: UINavigationController?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
        let rootVC = HomeVC()
        rootVC.view.backgroundColor = .white
        self.navigationController = UINavigationController(rootViewController: rootVC)
        self.window?.rootViewController = self.navigationController
    }

다음과 같이 작성하면 첫 화면에 네비게이션 원하는 뷰컨트롤러가 나오게 된다.

.view.backgroundColor를 지정하지 않았을 때에는 자동으로 블랙으로 설정되어 제대로 원하는 방향대로 화면이 나오지 않았다. 저렇게 뷰컨트롤러 인스턴스의 백그라운드 컬러를 화이트로 지정해주니 원하는 대로 보이게 되었다.

 

private func bindUIWithView(){
        calendarButton.rx.tap
            .subscribe(onNext:  { [weak self] in
                let calendarVC = CalendarVC()
                calendarVC.view.backgroundColor = .white
                self?.navigationController?.pushViewController(calendarVC, animated: true)
            }).disposed(by: disposeBag)
    }
}

버튼을 클릭하면 원하는 VC로 이동하는 코드를 작성했다. 이게 좋은 코드인지는 아직 확신이 들지 않는다. Rx 공부를 더 하면서 개선해 나가야 겠다.