Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iphone应用程序中的反向导航_Iphone_Objective C_Xcode_Uinavigationcontroller_Back Button - Fatal编程技术网

iphone应用程序中的反向导航

iphone应用程序中的反向导航,iphone,objective-c,xcode,uinavigationcontroller,back-button,Iphone,Objective C,Xcode,Uinavigationcontroller,Back Button,当我在iPhone应用程序中按下后退按钮时,有什么方法可以捕捉到事件吗?现在,我正在使用一个按钮,上面有一个名为Back的图像,并定义了相应的操作 我的客户端需要默认的返回按钮指向上一个屏幕,所以基于点击事件,我应该能够使它指向特定的屏幕,以便显示该屏幕的标题 简而言之,我需要后退按钮来显示我需要的标题,可以吗 提前感谢。有两种方法可以做到这一点: 自己执行后退按钮,并调用UINavigationController的-(UIViewController*)popViewControllerAn

当我在iPhone应用程序中按下后退按钮时,有什么方法可以捕捉到事件吗?现在,我正在使用一个按钮,上面有一个名为Back的图像,并定义了相应的操作

我的客户端需要默认的返回按钮指向上一个屏幕,所以基于点击事件,我应该能够使它指向特定的屏幕,以便显示该屏幕的标题

简而言之,我需要后退按钮来显示我需要的标题,可以吗


提前感谢。

有两种方法可以做到这一点:


  • 自己执行后退按钮,并调用
    UINavigationController
    -(UIViewController*)popViewControllerAnimated:(BOOL)animated

  • 子类
    UINavigationController
    并实现
    -(UIViewController*)popViewControllerAnimated:(BOOL)animated
    ,以进行处理并将调用传递给
    super

  • 正如另一个答案
    UINavigationBarDelegate
    中所建议的,如果您处理
    –导航栏:didPopItem:
    消息,您可以检测按钮是否已按下


  • 您可以在
    视图中执行代码将消失:
    方法,并在
    视图中将出现标记bBackClicked=true
    ,如果您从当前视图控制器中推送任何其他控制器,put flag bBackClicked=false。

    UINavigationBarDelegate
    可能是处理
    –导航栏:didPopItem:
    消息时最接近检测按钮是否已按下的方法

    当按下后退按钮或当您的代码从导航控制器堆栈本身弹出视图时,将调用此函数。如果您的代码是手动弹出视图,那么设置一个标志来指示您的代码何时启动了弹出,因此您可以确定何时点击了后退按钮,这应该很简单

    在UINavigationBarDelegate实现中,创建一个布尔属性,如
    poppedInCode
    ,在代码执行pop之前将其设置为true,并实现委托,如:

    - (void) navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item
    {
        if (!self.poppedInCode) {
            // back button was tapped
        }
    
        // set to false ready for the next pop
        self.poppedInCode = FALSE;
    }
    

    与目前公认的答案相比,这有一个优势,即它不需要对苹果文档中说不应该进行子类化的组件进行子类化。它还保留了内置后退按钮的所有行为,而无需重写。

    此方法比提供的其他方法更简单。这种方法的一个优点是不需要用委托方法使代码变得不必要的复杂。如果您已经有了
    UINavigationController
    的委托,则此方法也更容易实现,因为它一次只能有一个委托引用

    -(void)viewWillDisappear:(BOOL)animated {
        if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
            // 'Back' button was pressed.  We know this is true because self is no longer
            // in the navigation stack.
        }
    
        [super viewWillDisappear:animated];
    }
    

    UINavigationController的文档不鼓励您进行子类化,因此我不推荐选项2实现后退按钮本身意味着使用带有后退图像的按钮,并定义该按钮单击事件的操作?如果是这样的话,我将在当前场景中的代码中执行上述操作。