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

所需属性

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")
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容