화면 전환을 하는 버튼이 여러개가 있을 떄, 계속 예상치 못한 화면으로 전환되어 정리하는 겸 기록해보자..
먼저 fullScreenCover
에 대해 알아보자.
가능한 한 많은 화면을 표현하는 modal 보기라고 설명되어 있는데, 보여줄 컨텐츠가 연관되어 있는 것이 아닌 새로운 컨텐츠일떄 사용할떄 많이 사용하지 않을까 싶다.
사용법은 간단하다.
struct ContentView: View {
@State private var isButtonTap = false
var body: some View {
VStack {
Button {
isButtonTap.toggle()
} label: {
Text("화면 전환!")
}
}
.fullScreenCover(isPresented: $isButtonTap) {
Text("화면 전환 완료")
}
}
}
isPresented
에 바인딩 Bool 값을 변환시켜주게되면, 아래 영상처럼 화면전환이 된다.
이제 버튼이 여러개 있을 경우 각각의 맞는 화면을 전환해보자.
enum ButtonCase: CaseIterable, Identifiable {
case a
case b
case c
var id: String {
switch self {
case .a:
return "화면 전환 A"
case .b:
return "화면 전환 B"
case .c:
return "화면 전환 C"
}
}
}
struct ContentView: View {
@State private var buttonCase: ButtonCase? = nil
var body: some View {
VStack {
ForEach(ButtonCase.allCases, id: \.self) { button in
Button {
buttonCase = button
} label: {
Text(button.id)
}
}
}
.fullScreenCover(item: $buttonCase) { button in
switch button {
case .a:
Text("화면 전환 완료 A")
case .b:
Text("화면 전환 완료 B")
case .c:
Text("화면 전환 완료 C")
}
}
}}
코드부터 보게되면, enum
타입으로 버튼케이스에 대해서 정리를 해두고, View에서 Button 클릭 시 해당 타입을 주입시켜주고 있다.
여기서 다른 점이 fullScreenCover
파라미터 사용하는 것이 앞에 것과 다르다. 여기선 item
을 사용했는데, isPresent
를 사용하게 되면 처음 클릭 시 원하는 화면이 안나오게 되는 버그? 현상이 있는데...
print
를 통해 디버깅을 해보아도, 타입은 변경이 되었지만, 화면 전환 시 예상치 못한 화면이 나오게 된다.
참고자료.. 제 상황과 매우 비슷해서, 도움이 많이 되었습니다.
https://stackoverflow.com/questions/66162219/swiftui-switch-sheet-on-enum-does-not-work
'iOS > SwiftUI' 카테고리의 다른 글
SwiftUI) `.fileImporter` 사용시 Error message. (0) | 2024.02.14 |
---|---|
SwiftUI) 연락처 정보 가져오기 (1) | 2023.11.20 |
SwiftUI TextField (0) | 2023.11.10 |
SwiftUI ZStack 활용 (0) | 2023.11.07 |
SwiftUI) NavigationBar 뒤로가기 버튼 안보이게 하기 (0) | 2023.06.12 |