В настоящее время я разрабатываю приложение с использованием SwiftUI.
Я пытаюсь сделать приложение с помощью Local Notification.
Я хочу подумать о наборе Allow Notifications в App Settings некоторых представлениях.
Но когда представление возвращается из App Settings с использованием прикрепленной навигационной ссылки (не кнопки «Назад»), метод onAppear не срабатывает, и я не могу показать значение сбора...
В моих кодах:
Open Settings
, чтобы перейти к App Setting
NotificationTest
ContentView
, тогда метод onAppear
не срабатываетКак я могу решить эту проблему?
Вот коды:
ContentView.swift
import SwiftUI
struct ContentView: View {
@State var isNotification = false
var body: some View {
VStack{
Text(isNotification ? "STATUS:ON" : "STATUS:OFF")
.padding()
Text("Open Settings")
.padding()
.onTapGesture {
UIApplication.shared.open(URL(string:UIApplication.openSettingsURLString)!)
}
}
.onAppear(){
confirmNotification()
}
}
func confirmNotification(){
UNUserNotificationCenter.current()
.requestAuthorization(options: [.alert, .badge, .sound]){
success, error in
if success{
isNotification = true
print("Notification set")
}else{
isNotification = false
}
}
}
}
NotificationTestApp.swift
import SwiftUI
@main
struct NotificationTestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
Xcode: версия 12.0.1
IOS: 14.0
Жизненный цикл: приложение SwiftUI
Вид уже появился, просто приложение в фоне. Попробуйте использовать вместо (или дополнительно) scenePhase
struct ContentView: View {
@Environment(\.scenePhase) private var scenePhase
@State var isNotification = false
var body: some View {
VStack{
Text(isNotification ? "STATUS:ON" : "STATUS:OFF")
.padding()
Text("Open Settings")
.padding()
.onTapGesture {
UIApplication.shared.open(URL(string:UIApplication.openSettingsURLString)!)
}
}
.onAppear(){
confirmNotification()
}
.onChange(of: scenePhase) { phase in
switch phase {
case .active:
confirmNotification()
default:
break
}
}
}