Iphone 检测何时按下Viewcontroller

Iphone 检测何时按下Viewcontroller,iphone,ios,objective-c,delegates,uinavigationcontroller,Iphone,Ios,Objective C,Delegates,Uinavigationcontroller,我正在尝试检测ViewController何时被按下。 所以我遵循了苹果的doc,关于NavegationBar代理,但我没有弄明白如何使它成功运行。 我把下面的代码放在我的ViewController中,但它没有检测到它正在推送。 我做错了什么 - (void)navigationBar:(UINavigationBar *)navigationBar didPushItem:(UINavigationItem *)item, { NSLog(@"didPushItem: %@", i

我正在尝试检测ViewController何时被按下。 所以我遵循了苹果的doc,关于NavegationBar代理,但我没有弄明白如何使它成功运行。 我把下面的代码放在我的ViewController中,但它没有检测到它正在推送。 我做错了什么

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

您应该为
UIViewController
UINavigationController
相关任务实施
UINavigationControllerDelegate

以下是指向文档的链接:

协议中不存在您想要的特定方法,该方法类似于“
navigationController:didPushViewController:animated:


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

不清楚需要执行什么操作,但有几种
UIViewController
方法可用于识别其上下文。下面有两个,后面还有两个


-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>
    }
}
-(void)将移动到ParentViewController:(UIViewController*)父级{
if(nil==父级){
//移动到零父级意味着从父级中移除
}否则{
//将作为的子视图控制器插入
}
}
-(无效)didMoveToParentViewController:(UIViewController*)父级{
if(nil==父级){
//移动到零父级意味着刚从父级中删除
}否则{
//刚作为的子视图控制器插入
}
}
这些将在导航控制器按下/弹出子视图控制器之前和之后调用

从文件中

didMoveToParentViewController:

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

-(void)didMoveToParentViewController:(UIViewController*)父级

参数

母公司

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

讨论

当视图控制器想要做出反应时,它可以重写此方法 添加到容器中

而且

将移动到ParentViewController:

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

-(void)将移动到ParentViewController:(UIViewController*)父级

参数

母公司

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

讨论

视图控制器可以在需要时重写此方法 已将其添加到容器中


对于
UIViewController
类,您应该实现
UINavigationControllerDelegate
协议,而不是
UINavigationBarDelegate
…谢谢,BOOL push=[self isMovingToParentViewController];这个方法确实对我有用!节省时间。。。!这些都是很好的补充。这取决于OP想要做什么。那些文件里有很多好东西!
- (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>
    }
}