判断某个ViewController是不是正在显示的ViewCo

2017-10-24  本文已影响21人  沈正方

所需属性

isViewLoaded: A Boolean value indicating whether the view controller’s view is loaded into memory.(isViewLoaded是一个布尔值,可以知道VC是否被加载到内存,isViewLoaded是UIViewController的属性)
window:The receiver’s window object, or nil if it has none.(window是UIView的属性,当view显示时,window属性基本有值,)


思路

如果一个ViewController是正在显示的ViewController,其View的属性window有值,反之为nil,所以我们可以通过

if view.window != nil {
    print("是正在显示的ViewController")
} else {
    print("不是正在显示的ViewController")
}

补充

但是因为访问ViewController的view属性可能会导致ViewController的加载(实测没有!),从而导致window赋值,为了保险起见,通过isViewLoaded属性我们可以先判断控制器有没有加载,如果没有,即使访问view属性导致加载,导致viewwindow属性赋值,我们仍然可以认为ViewController不是正在显示的ViewController

if self.isViewLoaded && view.window != nil {
    print("是正在显示的ViewController")
} else {
    print("不是正在显示的ViewController")
}
上一篇 下一篇

猜你喜欢

热点阅读