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