์ฑ์ ๋ง๋ค๋ค๋ณด๋ฉด List NavigationLink๋ฅผ ๋ง๋ค์ด์ ํด๋น cell์ ํด๋ฆญํ๋ฉด ํ๋ฉด์ด ์ ํ๋๋ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ ๋๊ฐ ์์ต๋๋ค.
์๋๋ NavigationLink List์ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋ ์ ๋๋ค.
@State var list = ["A","B","C"]
var body: some View {
NavigationView{
List{
ForEach(list, id:\.self){ data in
NavigationLink {
Text("Page Name: \(data)")
// .navigationBarBackButtonHidden(true)
} label: {
Text("Go \(data)")
}
}
}
}
}
๋ง์ฝ ์ ํ๋ ํ์ด์ง์ Back๋ฒํผ์ ์์ ๊ณ ์ปค์คํ ํ๊ณ ์ถ์ ๋๋ ์ด๋ป๊ฒ ํด์ผํ ๊น ?
์ฒซ๋ฒ์งธ ์๋
์ฒ์์๋ NavigationLink์ isActive ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด ๋ณด์์ต๋๋ค.
isActive๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ NavigationLink์ destination์ View ์ปดํฌ๋ํธ๊ฐ ์๋ ์๋ก์ด View ๋ก ์์ ํด์ฃผ์ด์ผํฉ๋๋ค.
์ ํ๋๋ ํ์ด์ง๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉ ๋ฐ์์ ์ฌ์ฉํด์ผํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
struct ContentView: View {
@State var list = ["A","B","C"]
@State var back = false
var body: some View {
NavigationView{
List{
ForEach(list.indices, id:\.self){ data in
NavigationLink(isActive: $back) {
LinkView(data: $list[data], back: $back)
.navigationBarBackButtonHidden(true)
} label: {
Text("Go \(list[data])")
}
}
}
}
}
}
struct LinkView: View{
@Binding var data: String
@Binding var back: Bool
var body: some View{
Text(data)
Button {
back = false
} label: {
Text("back")
}
}
}
isActive๋ NavigationLink๋ฅผ ํตํด ํ์ด์ง๊ฐ ์ ํ๋์์๋ true๋ก ์ ํ๋ฉ๋๋ค.
BUG
์ฌ๊ธฐ์ ๋ฐ์ํ ๋ฒ๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํด๋ฆญํ cell๊ณผ link์ ๋ฐ์ดํฐ๊ฐ ์ผ์นํ์ง๊ฐ ์์์!
์์ง? x100 ๋ฒ ์๊ฐํ ๊ฒฐ๊ณผ ๋ด๋ฆฐ ๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
back์ isActive ํ์ฑ ๋ณ์๋ก ๊ฐ์ง๋ NavigationLink๋ 3๊ฐ ์ ๋๋ค. (A,B,C)
NavigationLink๋ก ์ ํ๋ ๋ back ์ธ์คํด์ค์ ๊ฐ์ด true๋ก ๋ฐ๋๊ณ ๋ทฐ๊ฐ ์๋ก์ด ๋๋๋ง ๋ฉ๋๋ค.
ํด๋ฆญํ NavigationLink๊ฐ ์๋ ๋ชจ๋ NavigationLink์ isActive๊ฐ true๊ฐ ๋๋ฏ๋ก ๋๋คํ๊ฒ View๊ฐ ๋ณด์ด๊ฒ ๋ฉ๋๋ค.
๐ก ์ฆ, NavigationLink์ isActive๊ฐ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์๊ธด ์ด์!
ํธ๋ฌ๋ธ ์ํ
์ ๋ ์ด ํ์์ ๋ค์๊ณผ ๊ฐ์ด ํด๊ฒฐํ์ต๋๋ค.
๋จผ์ ๋ฒ๊ทธ์ ์์ธ @State var back ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
struct ContentView: View {
@State var list = ["A","B","C"]
var body: some View {
NavigationView{
List{
ForEach(list.indices, id:\.self){ data in
NavigationLink {
LinkView(data: $list[data])
.navigationBarBackButtonHidden(true)
} label: {
Text("Go \(list[data])")
}
}
}
}
}
}
struct LinkView: View{
@Binding var data: String
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View{
Text(data)
Button {
presentationMode.wrappedValue.dismiss()
} label: {
Text("back")
}
}
}
View์ ํ์ฑ ์ฌ๋ถ๋ฅผ isActive๋ก ์ ์ํ๋๊ฒ ์๋,
์ ํ๋๋ View ์์ฒด์ presentationMode๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ์ ๋๋ฅด๋ฉด ํด๋น View๋ฅผ dismissํ๋ ๋ฐฉ๋ฒ์ ์ ํํ์ต๋๋ค.
๊ทธ๋ฌ๋ฉด List์์๋ NavigationLink์ isActive ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋ฉ๋๋ค!
๋ ์ข์ ํด๊ฒฐ๋ฒ์ด ์๋ค๋ฉด ๊ณต์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค ๐
'๐ฑ iOS > SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SwiftUI] @State๋ฅผ ๊ฐ์ง๋ View์ ์ ๋ฐ์ดํธ (0) | 2022.10.29 |
---|---|
[SwiftUI] TabView ํ์ด์ง ์ด๋์ TabBar , NavigationBar Hidden ์ฒ๋ฆฌํ๊ธฐ (0) | 2022.08.14 |
๋๋ฐ์ด์ค ํ๋ฉด๊ณ ์ portrait only (0) | 2022.07.25 |
[SwiftUI] Grid์์ฑ (0) | 2022.07.05 |
URLSession์ ํตํดJSON ๊ฐ์ ธ์ค๊ธฐ (2) (0) | 2022.07.04 |