Как сделать так, чтобы в меню многозадачности у моей программы было видно определенное окно?


#1

Есть приложение с паролем. Хочу сделать так , чтобы при выходе из приложения по кнопке Home и перехода в меню многозадачности у своей программы ,я мог видеть только окно “Ввода пароля”, а не последнее открытое окно.


#2

Показывайте “окно ввода пароля” при переходе приложения в бекграунд.

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func applicationDidEnterBackground(_ application: UIApplication) {
        let vc = UIViewController()
        vc.view.backgroundColor = .red
        window?.rootViewController?.present(vc, animated: false)
    }
}


#3

Делал и так:

let storyboard = UIStoryboard(name: “Main”, bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: “Password”) as! Passwords
window?.rootViewController?.present(vc, animated: false)

И так:

let vc = Passwords()
window?.rootViewController?.present(vc, animated: false)

Но почему-то не работает


#4

Тут сильно зависит от иерархии ваших контроллеров, так точно заработает:

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    
    private var tmpRoot: UIViewController?

    func applicationDidEnterBackground(_ application: UIApplication) {
        let vc = UIViewController()
        vc.view.backgroundColor = .red
        let button = UIButton(type: .system)
        button.setTitle("Close", for: .normal)
        button.addTarget(self, action: #selector(closeVC), for: .touchUpInside)
        vc.view.addSubview(button)
        button.frame.size = CGSize(width: 100, height: 50)
        button.center = vc.view.center
        
        tmpRoot = window?.rootViewController
        window?.rootViewController = vc
    }
    
    @objc func closeVC() {
        window?.rootViewController = tmpRoot
        tmpRoot = nil
    }
}

#5

Как раз с этим у меня все получилось.
Вручную написанные Controller отображаются.
А вот вставить нужный мне контроллер не выходит.

Насчет иерархии контроллеров, то в моем случае вроде все просто.

Что в моем случае надо делать?


#6

Дёргайте нужный контроллер по ID

guard let vc =  window?.rootViewController?.storyboard?.instantiateViewController(withIdentifier: "ID") else { return }
tmpRoot = window!.rootViewController
window!.rootViewController = vc

Или лучше вынесите в отдельный сториборд нужный контроллер(ы)

tmpRoot = window!.rootViewController
window!.rootViewController = UIStoryboard(name: "Password", bundle: nil).instantiateInitialViewController()

#7

Все получилось, спасибо)