swiftui - 当视图从“应用程序设置”返回更改通知设置时如何触发“onAppear”方法?
问题描述
我目前正在使用 SwiftUI 开发应用程序。
我正在尝试使用Local Notification
.
我想反思一组Allow Notifications
中的App Settings
一些观点。
但是,当App Settings
使用我附加的导航链接(不是后退按钮)返回视图时,该onAppear
方法不会触发并且我无法显示收集值......
在我的代码中:
- 1.点击
Open Settings
导航到一个App Setting
- 2.更改通知设置
- 3.
NotificationTest
点击按钮 - 4.回到
ContentView
然后onAppear
方法不触发
我该如何解决这个问题?
以下是代码:
内容视图.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
}
}
}
推荐阅读
- jquery - JSON响应太晚了
- android - 没有从 recyclerView 内的按钮调用 onClick 回调
- python - 从创建 HTTPStatus 对象中获取 linting 错误
- h2o - 如何使用 CURL 从命令行获取 H2O automl?
- ios - AWS Cognito 注册:错误 37
- assembly - DASM 指令/伪指令
- java - 我在android studio中打错了吗?
- android - 有效地循环遍历 Firebase 中的多个子节点
- android - Android - android-apt 插件与 Android Gradle 插件不兼容。
- javascript - javascript 仅显示带有 promise 对象的 for 循环的最后一次迭代的输出