检查Viewcontroller何时被推送

时间:2012-08-12 13:45:05

标签: iphone ios objective-c delegates uinavigationcontroller

我正在尝试检测何时推送ViewController。 所以我遵循Apple http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationBarDelegate_Protocol/Reference/Reference.html的文档,关于NavegationBar委托,但我没有想出如何使它成功运作。 我在我的代码中放置了我的ViewController中的以下代码,但它没有检测到它正在推送。 我做错了什么?

- (void)navigationBar:(UINavigationBar *)navigationBar didPushItem:(UINavigationItem *)item, {
    NSLog(@"didPushItem: %@", item);
    [self showimage];
}

3 个答案:

答案 0 :(得分:12)

不清楚您需要做什么,但有几种UIViewController方法可以辨别其背景。 docs

中有两个以及另外两个
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    BOOL pushed = [self isMovingToParentViewController];

    printf("viewWillAppear     %d\n", pushed);

}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    BOOL popped = [self isMovingFromParentViewController];

    printf("viewWillDisappear     %d\n", popped);

}

答案 1 :(得分:5)

您应该为UINavigationControllerDelegateUIViewController相关任务实施UINavigationController

以下是文档的链接: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UINavigationControllerDelegate_Protocol/Reference/Reference.html

协议中不存在您想要的特定方法,例如“navigationController:didPushViewController:animated:”。

但是,我相信您可以使用navigationController:willShowViewController:animated:实现所需的行为。请注意,在显示UIViewController的视图之前以及将其推入UINavigationController堆栈之后,将调用此方法。

答案 2 :(得分:3)

-viewWillApear方法是合理的,但是当视图即将插入到视图层次结构中时,它会被调用,这可能是您想要的,也可能不是。

如果您想要更多地控制推/拉进度,可以覆盖

- (void)willMoveToParentViewController:(UIViewController *)parent {
    if (nil == parent) {
        // Moving to nil parent means being removed from parent
    } else {
        // Will be inserted as a child view controller of <parent>
    }
}

- (void)didMoveToParentViewController:(UIViewController *)parent {
    if (nil == parent) {
        // Moving to nil parent means was just removed from parent
    } else {
        // Was just inserted as a child view controller of <parent>
    }
}

这些将在导航控制器按下/弹出子视图控制器之前和之后调用。

来自文档...

  

<强> didMoveToParentViewController:

     

在容器视图控制器中添加或删除视图控制器后调用。

     

- (void)didMoveToParentViewController:(UIViewController *)parent

     

<强>参数

     

     

父视图控制器,如果没有父视图,则为nil。

     

<强>讨论

     

您的视图控制器可以在想要做出反应时覆盖此方法   被添加到容器中。

和...

  

<强> willMoveToParentViewController:

     

在添加或删除视图控制器之前调用   容器视图控制器。

     

- (void)willMoveToParentViewController:(UIViewController *)parent

     

<强>参数

     

     

父视图控制器,如果没有父视图,则为nil。

     

<强>讨论

     

您的视图控制器可以在需要知道时覆盖此方法   它已被添加到容器中。