#ios #swift #iphone #swift3 #appdelegate
#iOS #swift #iPhone #swift3 #appdelegate
Вопрос:
Это мой первый вопрос о переполнении стека, так что потерпите.
Я создаю приложение с одним просмотром с помощью WKWebView
. Которое просто загружает веб-приложение, используя url
Что я делаю и чего я хочу, я объяснил все ниже
Версия Xcode: 11.7
Версия iOS: 13.7
Вот Outlet
в ViewController
.
@IBOutlet var webView: WKWebView!
Это webView
загружается путем вызова следующей функции в viewDidLoad()
.
func loadMoma() {
if let safeUrl = URL(string: url) {
let request = URLRequest(url: safeUrl)
webView.load(request)
}
}
Вот мой viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
check = ConnectivityCheck.Connection()
if check {
loadMoma()
}
}
Здесь ConnectivityCheck.Connection()
возвращается значение true, если есть доступ к Интернету, и false, если его нет.
Вызывается использование этой проверки loadMoma()
.
И если нет соединения, ничего не происходит amp; в viewDidAppear()
методе, Alert
вызывается функция, вот код для этого.
override func viewDidAppear(_ animated: Bool) {
if !check {
self.Alert(Message: "Connection error!, please enable the Internet.")
}
}
Определение Alert()
метода :-
func Alert (Message: String){
let alert = UIAlertController(title: "No Connectivity.", message: Message, preferredStyle: .alert)
let action = UIAlertAction(title: "Go to settings", style: .default) { (action) in
if let settingsUrl = URL.init(string: UIApplication.openSettingsURLString), UIApplication.shared.canOpenURL(settingsUrl) {
UIApplication.shared.openURL(settingsUrl)
}
}
alert.addAction(action)
present(alert, animated: true, completion: nil)
}
Это вызывает оповещение и кнопку для перехода к настройкам iPhone для включения Интернета.
Вывод метода оповещения
Чего я хочу
Когда пользователь возвращается из настроек в приложение, в AppDelegate
, loadMoma()
должен вызываться метод.
Для этого я создал экземпляр ViewController
в классе AppDelegate
следующим образом :-
var vc = ViewController()
Я loadMoma
вошел applicationWillEnterForeground
вот так:-
func applicationWillEnterForeground(_ application: UIApplication) {
print("applicationWillEnterForeground")
if !flag {
vc.loadMoma()
}
}
Где flag
то же самое, что и check
.
Но дело в том, что даже печать не запускается, когда я нажимаю кнопку «Домой» или перехожу к настройкам во время запуска приложения.
Пожалуйста, дайте мне знать, куда я должен vc.loadMoma()
вставить AppDelegate
, чтобы получить функциональность, которую я описал выше.
Заранее спасибо
Комментарии:
1. applicationWillEnterForeground будет запущен, когда приложение находится в состоянии переднего плана. Получите текущий корневой контроллер представления из объекта window. вот так. защитите let yourvc = self.window? .RootViewController как? YourVC else { return } выполняет вашу перезагрузку.
Ответ №1:
Поскольку вы используете iOS версии 13.7 и Xcode версии 11.7, вам придется использовать методы жизненного цикла делегатов сцены, чтобы выполнить ваши требования.
Всякий раз, когда пользователь возвращается в ваше приложение из других приложений, методы sceneWillEnterForeground и sceneDidBecomeActive SceneDelegate будут запущены. Итак, вы можете поместить свой код для проверки подключения к Интернету и вызова метода loadMoma() внутри метода sceneWillEnterForeground.
#HappyCoding
Ответ №2:
Попробуйте поместить код, который вы хотите выполнить при открытии приложения, в applicationDidBecomeActive, и код, который вы хотите запустить при выходе, в applicationDidEnterBackground, в делегате приложения.