Есть приложение с паролем. Хочу сделать так , чтобы при выходе из приложения по кнопке Home и перехода в меню многозадачности у своей программы ,я мог видеть только окно “Ввода пароля”, а не последнее открытое окно.
Как сделать так, чтобы в меню многозадачности у моей программы было видно определенное окно?
haymob
#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)
}
}
NONAME8
#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)
Но почему-то не работает
haymob
#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
}
}
NONAME8
#5
Как раз с этим у меня все получилось.
Вручную написанные Controller отображаются.
А вот вставить нужный мне контроллер не выходит.
Насчет иерархии контроллеров, то в моем случае вроде все просто.
Что в моем случае надо делать?
haymob
#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()