티스토리 뷰
SwiftUI에서 NavigationLink에 Action을 추가하려고 하는데 계속 적용이 안 되는 게 문제였다.
NavigationLink에 Action을 적용해보자!!!!
🔴 실패
처음에 .onTapGesture를 사용했는데 회원가입 Text를 클릭해도 아무 로직을 수행하지 않았다.
.onTapGesture는 View에 직접적으로 TapGesture 동작을 추가하는 방법이라고 한다.
: 해당 View가 탭되면 특정 작업을 수행할 수 있다.
아래 코드는 print()가 실행되지 않았다.
왜냐하면 NavigationLink라는 View를 탭하는 경우 로직이 수행되는데 NavigationLink를 View로 할 수 없기 때문이다.
NavigationLink(destination: NumberVerificationView()) {
Text("회원가입")
.font(.pretendard(.medium, size: 9))
.platformTextColor(color: Color("Gray04"))
}
.onTapGesture {
print("tapped")
}
Text("회원가입")을 탭한 경우로 바꾸면 되지 않을까??? 하고 적용해 봤다.
하지만,,,,,,,, "회원가입"을 탭한 경우 print()는 출력이 되는데 화면 이동이 일어나지 않았다,,,,,,,
Text를 클릭한 경우 화면이동이 되는 로직이 아니라 .onTapGesture 로직만 수행하여 이런 문제가 일어난 것 같다.
NavigationLink(destination: NumberVerificationView()) {
Text("회원가입")
.onTapGesture {
print("tapped")
}
}
계속 구글링 끝에 결국 해답을 찾았다~~~
🟢 성공
찾아본 후 .simultaneousGesture(TapGesture().onEnded{})를 사용하니 회원가입 Text를 클릭하니까 print도 출력이 되면서 화면이동도 가능하다!!
: View에 정의된 gesture와 동시에 처리할 gesture를 View에 연결한다.
NavigationLink에 정의된 gesture => 화면이동
simultaneousGesture에 정의된 gesture => print
위와 같이 두 gesture가 동시에 일어나기 때문에 print와 화면이동이 가능한 것 같다 ㅎㅎ
NavigationLink(destination: NumberVerificationView()) {
Text("회원가입")
.font(.pretendard(.medium, size: 9))
.platformTextColor(color: Color("Gray04"))
}
.simultaneousGesture(TapGesture().onEnded{
print("tapped")
})
- TapGesture(): 사용자가 View를 탭한 경우
- .onEnded{}: View 탭하면 .onEnded{} 내부 코드 실행
'스위프트 > SwiftUI' 카테고리의 다른 글
[SwiftUI] - Kakao ID 토큰에 nonce 추가 (0) | 2024.04.25 |
---|---|
[SwiftUI] - ViewModel에서 @State 사용시 문제점 (0) | 2024.04.18 |
[SwiftUI] - Custom Font 적용 (0) | 2024.03.19 |
[SwiftUI] - ObservableObject 예제 (0) | 2024.03.12 |
[SwiftUI] - Combine 예제 (0) | 2024.03.11 |