如何通过弹出来判断视图是否出现?

时间:2010-07-06 10:42:16

标签: iphone objective-c uinavigationcontroller

使用UINavigationViewController,如何查看视图的显示方式?

视图以直接的方式出现,作为UINavigationController堆栈中的第一个视图。或者它已经出现,因为第二个视图已经弹出,第一个视图再次显示出来。你怎么知道这些发生了哪些?

5 个答案:

答案 0 :(得分:1)

据我所知,唯一可行的方法是继承UINavigationController并覆盖UINavigationBarDelegate methods

– navigationBar:shouldPushItem:
– navigationBar:didPushItem:
– navigationBar:shouldPopItem:
– navigationBar:didPopItem:

当然,别忘了拨打super

答案 1 :(得分:1)

简单的方法是向RootViewController添加一个属性,以跟踪它是否已将另一个视图推送到navigationController。

-(BOOL)hasPushedSecondView;

在init方法中初始化为NO。

在将secondViewControllers视图推入堆栈之前,请将该属性更新为YES。

在viewWillAppear中,检查值并相应地更新视图。根据您希望应用程序的行为方式,您可能需要将hasPushedsecondview属性重置为NO。

答案 2 :(得分:0)

根据您了解差异的原因,您还可以在受影响视图的viewWillAppear / viewWillDisappear方法中操作变量。

看看this SO question

答案 3 :(得分:0)

您可以根据应用程序的编写方式查看leftBarButtonItem或backBarButtonItem,并确定视图的显示方式。如果它在顶部,除非你有一个自定义的leftBarButtonItem,那里就没有对象。

答案 4 :(得分:0)

您可以通过UIViewController子类上的几个方法直接确定这一点。

来自Apple's documentation

  

偶尔,知道视图出现的原因或者有用   消失。例如,您可能想知道是否有视图   出现是因为它刚刚被添加到容器或是否   之所以出现,是因为其他一些模糊它的内容被删除了。这个   使用导航控制器时经常出现特定示例;   您的内容控制器的视图可能会出现,因为视图控制器   只是被推到导航堆栈或它可能会出现,因为   之前的控制器从堆栈中弹出。

     

UIViewController类提供了视图控制器可以使用的方法   打电话来确定出现外观变化的原因。

  • isMovingFromParentViewController:视图被隐藏,因为视图控制器已从容器中删除
  • isMovingToParentViewController:显示视图,因为它被添加到容器中
  • isBeingPresented :正在显示视图,因为它是由另一个视图控制器呈现的
  • isBeingDismissed :视图被隐藏,因为它只是被暗淡了