6

我正在尝试检测何时推送 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];
}
4

3 回答 3

13

不清楚您需要做什么,但有几种UIViewController方法可以识别其上下文。下面有两个,文档中有几个

- (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);

}
于 2012-08-12T15:49:31.417 回答
5

您应该实施UINavigationControllerDelegateforUIViewControllerUINavigationController相关的任务。

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

您想要的特定方法(类似于“ navigationController:didPushViewController:animated:”)在协议中不存在。

但是,我相信您可以使用navigationController:willShowViewController:animated:. 请注意,此方法在视图UIViewController显示之前和被推入UINavigationController堆栈之后被调用。

于 2012-08-12T15:19:39.217 回答
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。

讨论

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

于 2012-08-12T20:53:30.557 回答