티스토리 뷰
Custom navigation back button 을 만들어보자!
import SwiftUI
struct BackButtonView: View {
@Environment(\\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View {
Image(systemName: "chevron.backward")
.frame(width: 24, height: 24)
.onTapGesture {
presentationMode.wrappedValue.dismiss()
}
}
}
뒤로가기 버튼을 따로 파일을 생성해서 만들어줬다.
처음에는 해당화면에 ToolbarItem부분에 넣으려 했는데 생각해보니 여기저기서 쓸 것 같아서 따로 만들었다.
공통으로 사용하는 네비게이션을 만들 수 있으면 좋을텐데 방법을 찾아봐야겠다.
// 1
import SwiftUI
struct ProductRegisterView: View {
var body: some View {
VStack {
Text("mm")
}
.navigationBarTitleDisplayMode(.inline)
.navigationBarBackButtonHidden(true)
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
BackButtonView()
}
ToolbarItem(placement: .principal) {
Text("약품 추가")
.fontWeight(.semibold)
.font(.system(size: 16))
}
}
}
}
그리고 해당화면 코드
네비게이션을 커스텀하는 방법에는 여러가지 방법이 있었다.
// 2
struct ProductRegisterView: View {
var body: some View {
VStack {
Text("mm")
}
.navigationTitle(Text("약품 추가"))
.navigationBarBackButtonHidden(true)
.navigationBarItems(leading: BackButtonView())
.navigationBarTitleDisplayMode(.inline)
}
}
이것처럼 해도 아래와 같은 화면이 나온다.
하지만 나는 타이틀부터 모든 것을 다 커스텀하고 싶었기 때문에 1번방법을 사용했다.
삽질💢
위처럼 구현하고 나면 스와이프로 뒤로가는 제스처가 안된다.
.navigationBarBackButtonHidden(true)
위 코드를 사용하게되면 네비게이션 뒤로가기 버튼을 숨기면서 스와이프 제스처도 같이 사라지는 것으로 예상된다.
왜 그렇게 만든건지는 ..... 내가 부족해서 뭘 놓치고 있는거겠지..
해결
extension UINavigationController: ObservableObject, UIGestureRecognizerDelegate {
override open func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
}
public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return viewControllers.count > 1
}
}
해당 코드를 아무데나 넣어주면 된다.
나는 따로 파일을 만들어서 사용했다.
NavigationView의 엄마..?부모..? 근본인 UINavigationController에 접근한다.
popGesture를 인식하고 전달하는 delegate에 self 로 해준다.
🤔
구글링해도 결과가 잘 안나오기도하고 SwiftUI자체가 빠르게 변하고있기 때문에 정보를 얻기가 쉽지않다.
아니면 내가 못찾는거라던가...
UIKit에서는 간단하게 할 수 있었던게 SwiftUI에서는 복잡하게 해야할 때도 있고,
반대로 SwiftUI에서는 간단하게 할 수 있는 기능들도 있다.
조금씩 적응이 되고있고 하면서 더 나은방법을 찾으면서 계속 공부를 해야겠다.
제가 틀렸거나 다른 의견이 있으시다면 댓글로 남겨주시면 감사하겠습니다 :)
참고 사이트
Swift: Custom NavigationView에서 Swipe-back 가능하게 하기
Custom NavigationView에서 Swipe back 기능을 다시 활성화하고, UINavigationController을 직접 확장해 NavigationView 기본 설정을 바꾸는 법을 알아보자.
medium.com
'iOS > SwiftUI' 카테고리의 다른 글
[SwiftUI] 카카오 로그인 (0) | 2022.06.15 |
---|---|
[SwiftUI] Splash (0) | 2022.06.15 |
[SwiftUI] Coordinator (0) | 2022.05.02 |
[SwiftUI] UIRepresentable (0) | 2022.05.02 |
[SwiftUI] Custom Alert (0) | 2022.04.28 |
- Total
- Today
- Yesterday
- 카메라
- Swift
- frame과 bounds 차이
- file private
- onTapGesture
- tabview
- Generic
- delegate
- ObservedObject
- docker
- Xcode
- Git
- strcut
- AWS
- Custom
- IOS
- 곰튀김
- AWS Fargate
- ChatGPT
- enumerations
- Login
- kakao
- rxswift
- CodingTest
- MVVM
- Protocol
- OCR
- 의미있는이름
- SwiftUI
- navigation
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |