Как запустить метод `onAppear`, когда представление возвращается из `Настройки приложения`, изменяя настройку уведомлений?

В настоящее время я разрабатываю приложение с использованием SwiftUI.

Я пытаюсь сделать приложение с помощью Local Notification.

Я хочу подумать о наборе Allow Notifications в App Settings некоторых представлениях.

Но когда представление возвращается из App Settings с использованием прикрепленной навигационной ссылки (не кнопки «Назад»), метод onAppear не срабатывает, и я не могу показать значение сбора...

В моих кодах:

  • 1. Нажмите Open Settings, чтобы перейти к App Setting
  • 2. Измените настройку уведомлений.
  • 3.Нажмите кнопку NotificationTest
  • 4. Вернитесь к 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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
897
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вид уже появился, просто приложение в фоне. Попробуйте использовать вместо (или дополнительно) 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
            }
        }
    }

Другие вопросы по теме