Swift View перезагрузить, когда приложение становится активным

Я нашел еще одну проблему, вызвавшую эту проблему, и уже решил ее. Я случайно сохранил свой скрипт в кодировке UTF-16. Похоже, что PHP5 не может распознать тег <?php в 16-битной кодировке по умолчанию.

0
задан Frank van Puffelen 24 March 2019 в 20:27
поделиться

2 ответа

Лучше послушать UIApplication.didBecomeActiveNotification. IOS отправляет это уведомление, когда приложение переходит с фона на передний план.

Вы можете установить обработчик для этого уведомления, например, в методе viewDidLoad вашего контроллера.

override func viewDidLoad() {
   super.viewDidLoad()

   NotificationCenter.default.addObserver(self,
                                          selector: #selector(handleAppDidBecomeActiveNotification(notification:)),
                                          name: UIApplication.didBecomeActiveNotification,
                                          object: nil)
}

Ваш обработчик будет просто методом в том же контроллере представления для вызова при получении этого уведомления. В этом методе вы можете перезагрузить данные или сделать все, что захотите

@objc func handleAppDidBecomeActiveNotification(notification: Notification) {
    reloadData()
}

И, конечно, не забудьте отменить регистрацию для UIApplication.didBecomeActiveNotification, когда контроллер представления закрыт. Например, в методе deinit контроллера

deinit {
   NotificationCenter.default.removeObserver(self)
}

Таким образом, логика для перезагрузки и то, что запускает перезагрузку, будут запитаны в каждом контроллере представления, и делегат приложения не будет знать об этом лучше.

0
ответ дан plamkata__ 24 March 2019 в 20:27
поделиться

Вы можете справиться с этим из AppDelegate.

Использование дополнительного приложения стало активным методом.

func applicationDidBecomeActive(_ application: UIApplication)

Этот метод вызывается, чтобы приложение узнало, что оно перешло из неактивного в активное состояние. Этот метод следует использовать для перезапуска любых задач, которые были приостановлены (или еще не запущены), когда приложение было неактивным.

Отредактировано, чтобы показать, как получить нужный контроллер. Проверьте контроллер внутри него:

func applicationDidBecomeActive(_ application: UIApplication) {
   let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate
   if let controller = appDelegate?.window?.rootViewController {
      if let navigationController: UINavigationController = controller as? UINavigationController {
         let viewControllers: [UIViewController] = navigationController.viewControllers
         for viewController in  viewControllers {
             // Check for your view controller here
         }
      } else if let viewController: UIViewController = controller as? UIViewController {
          // Check for your view controller here
      } else if let tabController: UITabBarController = controller as? UITabBarController {
         // Narrow the hierarchy and check for your view controller here
     }
   }
}
0
ответ дан sinner 24 March 2019 в 20:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: