Swift 3 | Controlla se un controller di visualizzazione è la radice dal suo interno.
È possibile accedere a window
da un controller di visualizzazione, è sufficiente utilizzare self.view.window
.
Contesto: devo aggiornare la posizione di una vista e attivare un'animazione quando il dispositivo viene ruotato. Voglio solo farlo se il controller della vista è attivo.
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(
self,
selector: #selector(deviceDidRotate),
name: .UIApplicationDidChangeStatusBarOrientation,
object: nil
)
}
func deviceDidRotate() {
guard let window = self.view.window else { return }
// check if self is root view controller
if window.rootViewController == self {
print("vc is self")
}
// check if root view controller is instance of MyViewController
if window.rootViewController is MyViewController {
print("vc is MyViewController")
}
}
}
Se si ruota il dispositivo mentre MyViewController è attivo, potrete vedere le linee di cui sopra stampano alla console. Se MyViewController non è attivo, non li vedrai.
Se sei curioso perché sto usando UIDeviceOrientationDidChange
invece di .UIDeviceOrientationDidChange
, guarda this answer.
fonte
2017-03-17 23:02:27
Stai cercando di determinare se si tratta di un'istanza di una particolare classe o di un'istanza specifica? – mc01
Istanza di una classe – user83039