์์์ ์์ฑํ๋ ๊ธ์์, SecondPage์์ NavigationBarHidden(true)์ฝ๋๋ฅผ ์์ ๊ณ , ๋น๋์์ผ๋ณด๋ฉด ์๋์ ๊ฐ์ด ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ ๋ง์ง๋ง ํ๋ฉด์์ ๋ค๋ก๊ฐ๊ธฐ ๋๋ฒ์ ๋๋ฅด๋ฉด, MainPage๊ฐ ๋ฑ์ฅํ์ง๋ง,,, ๋ง์ฝ ๋ฐ๋ก ํ๋ฉด์ผ๋ก ๊ฐ๊ณ ์ถ๋ค๋ฉด? ์๋์ ๊ฐ์ด ๋ง์ง๋ง ํ๋ฉด์ NavigationLink๋ฅผ ํตํด ์ฒซํ๋ฉด์ผ๋ก ๊ฐ๊ฒ ๋ง๋ค ๊ฒ์ด๋ค.
// ThirdPage ์ฝ๋
import SwiftUI
struct ThirdPage: View {
var body: some View {
VStack{
Text("This is Last Page.")
NavigationLink(destination: ContentView()) {
Text("Main์ผ๋ก ๋์๊ฐ๊ธฐ")
.foregroundColor(Color.white)
.frame(width: 100, height: 60, alignment: .center)
.background(RoundedRectangle(cornerRadius: 10)
.fill(Color.purple))
}
}
}
}
struct ThirdPage_Previews: PreviewProvider {
static var previews: some View {
ThirdPage()
}
}
์๋ฒฝํด ๋ณด์ธ๋ค. ๋ง์ง๋งํ๋ฉด์ ๋ฒํผ์ ๋ฃ์ด์ destination์ผ๋ก ContentView๋ฅผ ๊ฑธ๋ฉด ๋์ง ์์๊น!? ThirdPage์ ๋ํ ์ฝ๋๋ฅผ ์ด๋ ๊ฒ ์์ ํ๊ณ ๋น๋ํด๋ณด๋ฉด ๊ฒฐ๊ณผ๋ฌผ์ ์๋์ ๊ฐ๋ค.
main์ ๋ฒํผ์ ๋๋ฅผ๋๋ง๋ค NavigationView๊ฐ ํ์ธต์ฉ ๋ ์์ด๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ฐ์ ์ด ๋ฌธ์ ๋ก ๊ณ ๋ฏผ์ ๋ง์ด ํ์๋ ๊ฒ ๊ฐ๋ค. ์ด๊ฒ์ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น?
ํด๊ฒฐ๋ฐฉ๋ฒ์ @Binding์ ์ด์ฉํด์ ๊ฐ์ ๋๊ฒจ์ฃผ๋ ๊ฒ์ด๋ค. ์์ฑ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
1. ์ต์๋จ ๋ทฐ์์ (๋์์ค๊ณ ์ถ์ ๋ทฐ) @State ๋ณ์๋ฅผ ๋ง๋ค์ด์ค๋ค.
firstNaviLinkActive ๋ผ๊ณ state๋ณ์๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , ์ด๊ธฐ๊ฐ์ false ๋ถํฐ ์์ํ๋ค. ์ด ๊ฐ์ NavigationLink ์์ ๋ค์ ๋ทฐ๋ก ๋๊ฒจ์ค๊ฒ์ด๋ค. ์ด๋, $๋ก ํํํ ๊ฒ์, ํด๋น ๋ณ์๊ฐ binding๋ ๊ฐ์ด๋ผ๋ ๊ฒ์ ์๋ ค์ฃผ๋ ๊ฒ์ด๊ณ , isactive๋, ์ธ์๊ฐ์ด true๋ก ๋ณํ๋ฉด์ ๋๋ฒ์งธ ๋ทฐ๋ก ๋์ด๊ฐ๋ค๋ ๋ป์ด๋ค.
isactive ๋ฅผ ํด์ true๋ก ๋๊ฒจ์ฃผ๋ ์ด์ ๋, true๋ก ์ด๋ํ๋ค๊ฐ, ๋ง์ง๋ง ํ๋ฉด์์ "๋ฉ์ธํ์ด์ง๋ก ์ด๋ํ๊ธฐ"๋ฅผ ๋๋ ์ ๋, ์ด ๊ฐ์ false๋ก ์ ํํ๋ฉด์ ์ฒซ ํ๋ฉด์ผ๋ก ๋์์ค๊ฒ๋ ์ค์ ํ๊ธฐ ์ํด์๋ค.
// ContentView ์ฝ๋
import SwiftUI
struct ContentView: View {
@State var firstNaviLinkActive = false
var body: some View {
NavigationView {
VStack {
Text("This is Main page.")
.bold()
NavigationLink(destination: SecondPage(firstNaviLinkActive: $firstNaviLinkActive), isActive: $firstNaviLinkActive) {
Text("Click Here")
.foregroundColor(Color.white)
.frame(width: 100, height: 60, alignment: .center)
.background(RoundedRectangle(cornerRadius: 10)
.fill(Color.red))
}
.navigationBarHidden(true)
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
2. ๋๋ฒ์งธ ๋ทฐ์์ @Binding ๋ณ์๋ก firstNaviLinkActive ๊ฐ์ ๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ ์ด ๊ฐ์ 3๋ฒ์งธ ๋ทฐ๋ก ๋๊ธด๋ค.
// SecondPage ์ฝ๋
import SwiftUI
struct SecondPage: View {
@Binding var firstNaviLinkActive: Bool
var body: some View {
VStack{
Text("This is Second Page.")
NavigationLink(destination: ThirdPage(firstNaviLinkActive: $firstNaviLinkActive)) {
Text("Click Here")
.foregroundColor(Color.white)
.frame(width: 100, height: 60, alignment: .center)
.background(RoundedRectangle(cornerRadius: 10)
.fill(Color.green))
}
}
}
}
struct SecondPage_Previews: PreviewProvider {
static var previews: some View {
SecondPage(firstNaviLinkActive: .constant(true))
}
}
3. ๋ง์ง๋ง ํ์ด์ง์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก @Binding๋ณ์๋ก firstNaviLinkAcive๊ฐ์ ์ ๋ฌ๋ฐ์ ๋ค, Main์ผ๋ก ๋์๊ฐ๊ธฐ ๋ผ๋ ๋ฒํผ์ ๋ง๋ ํ, ๋ฒํผ์ด ํด๋ฆญ๋์์๋ firstNaviLinkActive๊ฐ์ false๋ก ์ค๋ฒ๋ฆฐ๋ค.
// ThirdView ์ฝ๋ (๋ง์ง๋งํ๋ฉด)
import SwiftUI
struct ThirdPage: View {
@Binding var firstNaviLinkActive: Bool
var body: some View {
VStack{
Text("This is Last Page.")
Button(action: {
firstNaviLinkActive = false
}, label: {
Text("Main์ผ๋ก ๋์๊ฐ๊ธฐ")
.foregroundColor(Color.white)
.frame(width: 100, height: 60, alignment: .center)
.background(RoundedRectangle(cornerRadius: 10)
.fill(Color.purple))
})
}
}
}
struct ThirdPage_Previews: PreviewProvider {
static var previews: some View {
ThirdPage(firstNaviLinkActive: .constant(true))
}
}
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ ํ๊ณ , ์์ฑ๋ณธ์ ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
iOS ์ฑ๊ฐ๋ฐ์ ํ๋ฉด์, @Binding๋ณ์์ ๋ํด์ ์ฒ์์ผ๋ก ์ ํด๋ดค๋ ์๊ฐ์ด์๋ค. ๊ฐ์ด ๋ณํ๊ฒ์ ์ ์ง์์ผ์ฃผ๋ฉด์, ๊ฐ์ ์ ๋ฌ๋ฐ๊ฒ ํด์ฃผ๊ณ , ๊ฐ์ด false๋ก ๋ฐ๋๋ฉด binding๋ ๋ชจ๋ ํ์ด์ง์ ํด๋น ๋ณ์๊ฐ ๋ค false๋ก ๋ฐ๋๋ ์ฌ๋ฐ๋ ๊ฐ๋ ์ด์๋ค.
์ถํ State๋ณ์์ Binding๋ณ์์ ๋ํด์ ๋ ์์ธํ๊ฒ ํฌ์คํ ํ๊ณ ๊ณต๋ถํด๋ณผ ์์ ์ด๋ค.