한결과 레지아이스

TIL in SwiftUI about onAppear && Modal, 22/03/04 본문

Today I Learned/SwiftUI

TIL in SwiftUI about onAppear && Modal, 22/03/04

miniwho 2022. 3. 4. 23:56

오늘 42Seoul iOS 개발 동아리 ApusPacificus에서 진행중인 프로젝트 ApusCheckIn을 진행하며 배운 것을 정리해보았습니다.

FrontView(앱 시작 뷰)에서 NavigationLink를 통해 넘어간 뷰(CalendarView)에서, 넘어가자마자 모달이 뜨게 하고 싶었습니다.

onAppear을 통해 그것을 해낼 수 있었습니다.

.onAppear {
            someStateVar = someValue
}

someStateVar의 상태의 따라 특정 모달을 띄워주는 뷰였는데, 뷰가 전환되자마자 onAppear 코드블럭이 실행되어 someValue에 해당하는 모달이 뜨게 되었습니다.

이 뷰는 ScrollView로 구성되어 있었는데, ScrollView에 요 모디파이어를 붙이니 잘 되었습니다. 근데 ScollView 내부의 VStack에 붙여도, 그 VStack 내부의 HStack에 붙여도 작동은 잘 하덥니다.. 다만 맨 밖의 ScrollView에 붙이는게 아무래도 젤 보기 좋아서 그리 했습니다.

Success!

문제는 모달이 뜨고 나서 해당 모달을 dismiss하면 CalendarView(넘어오자마자 모달을 띄운 뷰)가 아닌, 그 이전의 뷰(어플 시작 뷰 == FrontView)로 돌아간다는 것이었습니다..! 대체 왜?? 모르겠습니다..

해결은 했습니다.

FrontView에서는 .alert 모디파이어를 통해 팝업창을 띄워주고 있었는데, 그 위치가 문제였습니다.

<malfunctioning code>
//   var body: some View {
//        NavigationView {
//            VStack {
//                SomeView()
//            }
//        }
//        .alert(someValues)
//    }

<whatmademehappy code>
var body: some View {
        NavigationView {
            VStack {
                SomeView()
            }
        }
        .alert(someValues)
    }

대충 이렇게 생긴 뷰였는데요, .alert 모디파이어가 현재는 NavigationView에 붙어있습니다. 하지만 고장나있었을때는 주석처리된 코드처럼 내부의 VStack에 .alert가 붙어있었습니다.

무슨차이일까요?? 모르겠습니다. 하지만 문제를 해결해서 행복합니다.

Comments