반응형
LinkedIn
개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github
WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish
내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.
Recent Posts
Recent Comments
- Total
꿈꾸는리버리
SwiftUI Widget 딱대.. (3/3) : 위젯을 눌렀을 때 다른 화면으로 뜨게 하기 본문
반응형
위젯을 누르면 앱의 홈이 아니라 다른 화면으로 넘어가고 싶어서 해당 내용을 공부했다.
우선은 기본 화면이다.
main에는 navigationlink로 이어지는 button이 있다. 그리고 그 버튼을 누르면 다음 화면으로 넘어간다.
코드는 다음과 같다.
struct ContentView: View {
@State var isPresent = false
var body: some View {
NavigationView {
NavigationLink(isActive: $isPresent) {
SecondView()
} label: {
Text("다음화면으로 가자")
.onTapGesture {
isPresent = true
}
}
.navigationBarTitle("Your Characters")
}
.onOpenURL(perform: { (url) in
print("dd")
self.isPresent = url == URL(string: "widgetPractice:///next")
})
}
}
struct SecondView: View {
var body: some View {
Text("다음화면임")
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
위젯에서 어떤 걸 눌렀을 때 앱 화면으로 넘어가기 위해서는 해당 View의 URL이 필요하다.
(사람들이 widget deep link 라고 하더라..!?)
그래서 TimelineEntry 안에 url을 넣어주고,
struct SimpleEntry: TimelineEntry {
let date: Date
let configuration: ConfigurationIntent
let url = URL(string: "widgetPractice:///next") // 이부분
}
그리고 이렇게 widget에 widgetURL을 쓰면 앱이 열릴 때 어느 URL로 이동할지를 담아 보내준다고 한다.
struct widgetEntryView : View {
var entry: Provider.Entry
var body: some View {
Text(entry.date, style: .time)
.widgetURL(entry.url) // 이 부분
}
}
마지막으로 앱 내에서 그 시그널을 받는 부분은 이 onOpenURL 부분이다.
onOpenURL은 뷰가 scene이나 window에 대한 URL을 수신한다.
struct ContentView: View {
@State var isPresent = false
var body: some View {
NavigationView {
NavigationLink(isActive: $isPresent) {
SecondView()
} label: {
Text("다음화면으로 가자")
.onTapGesture {
isPresent = true
}
}
.navigationBarTitle("Your Characters")
}
// 이 부분
.onOpenURL(perform: { (url) in
self.isPresent = url == URL(string: "widgetPractice:///next")
})
}
}
그러면 이렇게 위젯을 눌렀을 때 해당 뷰가 열리는 것을 확인할 수 있다 !
추가적인 궁금증
궁금한게... 제일 처음 뷰에서 좀 더 깊은 뷰로 이동해야 할 때는 어떻게 해야 하는 걸까..?
누르는 버튼에 따라 달리하는 거는 appDelegate 또는 sceneDeleagate의 openURL이랑 link를 이용해서 한다는 데 이 부분도 공부가 필요할 거 같다.
반응형
'오뚝이 개발자 > SwiftUI' 카테고리의 다른 글
SwiftUI Widget 딱대(짐).. : 위젯 memory 제한 (2) | 2022.09.15 |
---|---|
swiftUI list drag and drop (0) | 2022.09.07 |
SwiftUI Widget 딱대.. (2/3) : 앱 내의 데이터를 widget에 띄우기 (0) | 2022.08.07 |
SwiftUI Widget 딱대.. (1/3) (0) | 2022.08.06 |
SwiftUI launchScreen(splash Image) 만들기 ( delay가 가능한.. ) (0) | 2022.08.04 |
Comments