Abh*_*ram 1 iphone objective-c uinavigationcontroller ios
目前,我按以下方式设置了导航堆栈:
ViewController A- > ViewController B- > ViewController C- >ViewController D
在ViewControllerC和的实现代码中ViewController D,我有一个选择器,如果满足以下测试,它将只运行代码块
if (self.navigationController.visibleViewController)
Run Code Online (Sandbox Code Playgroud)
我面临的问题是上面的测试总是返回true ViewController C.首先,我在IOS模拟器中启动我的应用程序,然后我一直向上导航到View Controller D.一旦ViewController D加载,我按下模拟器上的"home"按钮.按下主页按钮后,我再次单击我的应用程序并重新启动我的应用程序(进入前台).现在发生的是奇怪的,我可见的视图控制器是ViewController D,因为那是我最后一次的视图控制器.虽然ViewController D现在是我目前唯一可见的视图控制器,但上面的if语句也返回true ViewController C!(我只想要ViewController D's执行选择器代码,这是一个问题).
所以这就引出了一个问题,它究竟是什么意思成为一个visibleViewController如何才能使ViewController C's选择器不执行,如果ViewController D是在我之前出现的视图控制器..谢谢!
该visibleViewController属性返回当前可见的控制器,而不是返回的布尔属性YES或NO取决于当前控制器是否可见.只要屏幕上有一个可见的视图控制器 - 任何控制器 - 检查self.navigationController.visibleViewController将返回YES,因为nil传递给ifa的任何非值都被视为a YES.
检查应如下:
if (self == self.navigationController.visibleViewController)
Run Code Online (Sandbox Code Playgroud)
YES如果当前视图控制器是导航控制器的可见视图控制器,则将返回比较,NO否则返回.