我正在尝试检测何时推送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];
}
答案 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)
您应该为UINavigationControllerDelegate
和UIViewController
相关任务实施UINavigationController
。
协议中不存在您想要的特定方法,例如“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。
<强>讨论强>
您的视图控制器可以在需要知道时覆盖此方法 它已被添加到容器中。