4

我通过在其表视图单元格上的推送从另一个视图控制器启动一个视图控制器。现在在第二个视图控制器上,我有一大堆控件,主要是测试字段。我想使用第二个视图控制器中提供的默认后退按钮,因此它将成为第一个视图控制器的标题并记住就像我说的默认一样,所以我不想创建自己的后退按钮在第二个视图控制器上。所以想检测第二个视图控制器是否正在退出或消失或将消失,并根据某些条件阻止它返回到原始调用者视图控制器。我最初认为它可以在这里完成:

-(void) viewWillDisappear:(BOOL)animated {
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) 
    {
        // So back button was pressed on the second view controller, so how do I stop it
        // here from going back to the original view controller. 
    }
}

或者我该怎么做?我似乎找不到视图控制器返回类型的 BOOL 方法来调用和停止它。

谢谢。

4

4 回答 4

8

请注意,该方法称为 viewWillDisappear,而不是 viewShouldDisappear,因此 Apple 不会让您阻止视图在此时消失。从用户的角度来看,按下后退按钮确实应该让他们回来。相反,您可以考虑在不允许的情况下隐藏后退按钮。

于 2012-08-10T05:33:59.617 回答
1

您不能阻止视图控制器关闭,但是您可以模拟它。

此行将用调用自制函数的按钮替换关闭按钮

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(closeBtn)];

因此,您可以根据需要关闭视图:

- (void) closeBtn
{
    bool shouldClose=true;
    // Your conditions here
    if (shouldClose) [self dismissViewControllerAnimated:YES completion:nil];
}
于 2015-03-23T13:28:51.933 回答
0

制作一个自定义后退按钮并使用self.navigationItem.hidesBackButton=YES 将目标添加到您的自定义后退按钮并根据需要使用它。当您想移动视图时,您可以使用[self.navigationController popViewcontroller].

于 2012-08-10T05:57:02.750 回答
0

对不起,我的英文不好,所以阅读这么长的文字对我来说有点困难。我只能得到你想在没有按钮的情况下返回。我知道 navigationController 有一种方法可以返回到前一个视图。

于 2012-08-10T05:35:55.777 回答