Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 是否可以切换出由UINavigationController管理的视图控制器?_Iphone_Cocoa Touch_Uinavigationcontroller - Fatal编程技术网

Iphone 是否可以切换出由UINavigationController管理的视图控制器?

Iphone 是否可以切换出由UINavigationController管理的视图控制器?,iphone,cocoa-touch,uinavigationcontroller,Iphone,Cocoa Touch,Uinavigationcontroller,我正在打破UINavigationController的正常模式,或者至少我正在尝试 我们知道导航控制器通过堆栈管理导航。如果我使用根控制器A初始化,导航到B,然后导航到C,堆栈将看起来像-C/B/A 我想做的是,在视图C上有一个按钮,它将显示另一个视图,比如X,但仍然保持导航控制器的导航栏在适当的位置。本质上,在堆栈上切换“C”和“X”。我试图通过弹出C并立即按下X来实现这一点,如下图所示,但没有成功。我走错路了吗 -(IBAction)showViewX:(id)sender { [[sel

我正在打破UINavigationController的正常模式,或者至少我正在尝试

我们知道导航控制器通过堆栈管理导航。如果我使用根控制器A初始化,导航到B,然后导航到C,堆栈将看起来像-C/B/A

我想做的是,在视图C上有一个按钮,它将显示另一个视图,比如X,但仍然保持导航控制器的导航栏在适当的位置。本质上,在堆栈上切换“C”和“X”。我试图通过弹出C并立即按下X来实现这一点,如下图所示,但没有成功。我走错路了吗

-(IBAction)showViewX:(id)sender {
[[self.parentViewController navigationController] popViewControllerAnimated:NO];

XViewController *xViewController = [[XViewController alloc]
        initWithNibName:@"X" 
        bundle:[NSBundle mainBundle]];
[[self.parentViewController navigationController] pushViewController: xViewController animated:YES];
[xViewController release];  
}

在这种情况下,您可能真的没有尝试进行UINavigationController设计支持的那种导航。在您的示例中,您的用户如何从视图X返回视图C


UINavigationController旨在允许基本的前/后导航。如果您有更复杂的导航需求,则必须构建自己的导航系统。看看一些更复杂的苹果应用程序是如何进行导航的(邮件和Safari)-也许其中有些东西会有所帮助?

可能是因为您确实没有尝试进行UINavigationController设计支持的那种导航。在您的示例中,您的用户如何从视图X返回视图C

UINavigationController旨在允许基本的前/后导航。如果您有更复杂的导航需求,则必须构建自己的导航系统。看看一些更复杂的苹果应用程序是如何进行导航的(邮件和Safari)——也许其中有些东西会有所帮助?

(查看上面的澄清性评论,我误解了原始问题的目的,更好的方法是从视图C本身管理视图X或视图C的显示,根据需要切换,并且根本不改变堆栈。)

由于您想保留导航控制器栏,但又不想从“X”返回到“C”(我假设“X”之外还有其他路径),因此可以执行以下操作:

self.navigationItem.hidesBackButton = YES;
从ViewController X中,在
viewDidLoad
方法中

X仍然在堆栈上,C仍然在堆栈上,但是您得到了想要的视觉表示

否则,您可能需要滚动一个新的NavigationController,将X弹出到它的堆栈中,然后跳转到它,将旧堆栈(和ViewController)抛在后面。

(查看上面的澄清性评论,我误解了原始问题的目的,更好的方法是从视图C本身管理视图X或视图C的显示,根据需要切换,并且根本不改变堆栈。)

由于您想保留导航控制器栏,但又不想从“X”返回到“C”(我假设“X”之外还有其他路径),因此可以执行以下操作:

self.navigationItem.hidesBackButton = YES;
从ViewController X中,在
viewDidLoad
方法中

X仍然在堆栈上,C仍然在堆栈上,但是您得到了想要的视觉表示

否则,您可能需要滚动一个新的NavigationController,将X弹出到它的堆栈中,然后跳转到它,将旧堆栈(和ViewController)抛在后面。

您所谓的“视图C”实际上是“视图控制器C”。由于它是一个视图控制器,您可以轻松地将其设置为在两个视图(例如X和Y)之间切换。因此,您只需将C留在堆栈上,而不弹出它,然后在C本身的视图之间切换。例如,您可以将C设置为使用工具栏在视图之间切换。

您所谓的“视图C”实际上是“视图控制器C”。由于它是一个视图控制器,您可以轻松地将其设置为在两个视图(例如X和Y)之间切换。因此,您只需将C留在堆栈上,不弹出它,然后在C本身的视图之间切换。例如,您可以将C设置为使用工具栏在视图之间切换。

回答您的问题,“您的用户如何从视图X返回到视图C?”,他们将无法返回。相反,当他们返回时,他们将转到B而不是C。(在我的例子中,B有按钮可以转到C、X和其他视图)。要回答您的问题,“您的用户如何从视图X返回到视图C?”,他们将无法返回。相反,当他们返回时,他们将转到B而不是C。(在我的例子中,B有按钮可以转到C、X和其他视图)。