해당 글에서 코드 부분은 파란색으로 표기 됩니다.
해당 글에서 중요 부분은 붉은색으로 표기 됩니다.
iOS Widget Extension에 대한 기본 정보는 아래 링크에서 확인이 가능하다.
Widget Extension에 대한 전반적인 기본 정보를 알고 싶을 경우 아래 글이 도움이 될듯 하다.
iOS Widget Extension에서 URL 이미지를 로딩하고 싶을 경우 아래 글을 참고하자
iOS Widget Extension으로 위젯을 구성하게 되면, 위젯을 클릭 할때 기본적으로 앱이 실행되게 된다.
이 액션을 변경하고자 할때, 또는 위젯의 요소별로 다른 이벤트를 주고자 할때 아래 방법을 사용하면 된다.
(추가적으로 Widget Extension에서는 Button에 대한 이벤트를 수신할 수 없기 때문에 아래 방법으로 대체가 가능하다.)
방법은 Link를 사용하는 것이다. 그럼 아래 예시 코드를 살펴보자
참고: Widget Extension의 화면 구성은 SwiftUI만 지원된다.
// Ex)
// 1. HStack 안 VStack으로 4개의 항목이 존재할때 각 항목 마다 버튼을 구성한다고 가정한다.
HStack {
Spacer()
VStack {
Image("sample")
Text("TEST")
}
Spacer()
VStack {
Image("sample")
Text("TEST")
}
Spacer()
VStack {
Image("sample")
Text("TEST")
}
Spacer()
VStack {
Image("sample")
Text("TEST")
}
Spacer()
}
// 2. VStack으로 묶여 있다고 가정할 경우 VStack을 Link로 아래와 같이 감싸게 한다.
// - Link로 감쌀 경우 앱으로 전달할 링크를 전달한다.
// - 여기서는 myWidget으로 정의 했다.
HStack {
Spacer()
Link(destination: URL(string: "myWidget://widgetaction?parm1=data1")!) {
VStack {
Image("sample")
Text("TEST")
}
}
Spacer()
Link(destination: URL(string: "myWidget://widgetaction?parm1=data2")!) {
VStack {
Image("sample")
Text("TEST")
}
}
Spacer()
Link(destination: URL(string: "myWidget://widgetaction?parm1=data2")!) {
VStack {
Image("sample")
Text("TEST")
}
}
Spacer()
Link(destination: URL(string: "myWidget://widgetaction?parm1=data2")!) {
VStack {
Image("sample")
Text("TEST")
}
}
Spacer()
}
// 3. Link로 전달한 URL 수신 처리 하기 (Widget Extension 코드내에서가 아니라 App Code 내에서 처리해주어야 한다.)
// - 앱의 appDelegate 또는 sceneDeleagate의 openURL 메소드로 들어온다.// appDelegate open url 함수
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
// 들어온 URL 중 Link로 전달한 스키마 기준으로 원하는 기능 구현하기
}
// or sceneDeleagate open url 함수
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
// 들어온 URL 중 Link로 전달한 스키마 기준으로 원하는 기능 구현하기
}
'개발' 카테고리의 다른 글
Android fatal exception: too many receivers 오류가 발생될때? (0) | 2021.01.07 |
---|---|
iOS Widget Extension에서 URL 이미지 로딩 방법!? (0) | 2020.11.19 |
WKWebView 간편하게 쿠키(세션) 유지 시키기! (10) | 2020.11.19 |
iOS Project에 연동한 Cocoapods (Podfile) 연동을 해제하는 방법! (0) | 2020.11.19 |
iOS Widget 구성을 위한 Widget Extension 기본부분 살펴보기 (0) | 2020.11.16 |