过渡到导航视图控制器
Posted
技术标签:
【中文标题】过渡到导航视图控制器【英文标题】:Transition to a Navigation View Controller 【发布时间】:2013-09-13 08:13:13 【问题描述】:我有以下代码:
- (IBAction)buttonPressed:(UIButton *)sender
//sentder.titleLabel
NSString *label = [(UIButton *)sender currentTitle];
if ([label isEqualToString:@"Register"])
[sender setTitle:@"Registers" forState:UIControlStateNormal];
RegisterViewController *viewCon = [[RegisterViewController alloc] init];
RegisterNavigationController *navigation = [[RegisterNavigationController alloc] init];
[navigation pushViewController:viewCon animated:YES];
//self performSegueWithIdentifier:@"MySequeIdentifier" sender:];
....
我有一个带有以下按钮代码的 startController 可以正确调用。我创建了一个全新的默认 registerViewController (UIViewController) 和一个 registerNavigationContoller (UINavigationController 类)。如何让我的按钮单击以动画到 registerViewController 并让该视图控制器有一个带有后退按钮的栏?
我做错了吗,startViewController 是否应该是 UINavigationController,因为它只是一个 UIViewController?如果是这样,我如何摆脱此页面上的顶部栏?
【问题讨论】:
你创建了导航控制器并且从不将它添加到主视图控制器。将您的主 ViewController 设为 NavigationViewController,然后在其上使用 pushViewController。 【参考方案1】:您现有的视图控制器(包含此按钮代码的视图控制器)需要包含在导航控制器中。新的 VC 也将包含在同一个导航控制器中。 Nav Controller 管理这两个子视图控制器之间的标题栏和后退按钮导航。
将第一个 VC 嵌入到导航控制器中:
如果使用故事板,您可以选择视图控制器场景,然后在菜单中:Editor > Embed In > Navigation Controller
如果在代码中实例化,首先初始化视图控制器,然后将其嵌入到新的导航控制器中:
UIViewController firstVC;
firstVC = [[UIViewController alloc] initWithNib:@"nibname" bundle:nil]]
//(example of initialising with a xib/nib file)
UINavigationCOntroller navCon;
navCon = [UINavigationController alloc] initWithRootViewController:firstVC];
导航控制器
现在从您的按钮代码中,您要求您的父导航控制器管理转换:
RegisterViewController *viewCon = [[RegisterViewController alloc] init];
//take care to initialise correctly
//do you have a nib file? a storyboard scene?
[self.navigationController pushViewController:viewCon animated:YES];
或者,您可以在按钮和第二个故事板场景之间创建故事板推送转场 - 执行与此代码相同的功能。
如果您只希望第二个 VC 中的导航栏而不是第一个中的导航栏,您有多种选择。
使用每个视图控制器,您可以分别控制导航控制器的 BOOL 属性navigationBarHidden
- 例如self.navigationController.navigationBarHidden = YES
;
但您可能会发现导航栏状态之间的视觉转换不令人满意,并且可能需要考虑替代应用程序设计。例如,您可以从第一个视图控制器呈现第二个视图控制器。在这种情况下,两个 vcs 都不需要导航控制器(您的第二个 vc 可以包含它自己的 UINavigationBar)。或者呈现的视图控制器仍然可以嵌入到它自己的导航控制器中。无论哪种方式,您都不会获得第一个视图控制器的自动后退按钮,并且需要实现您自己的(仅当一个导航控制器管理一组子视图控制器时才提供后退按钮)。
这些只是一些建议,您必须尝试这些想法以及其他想法,才能找出最适合您的应用的方法。
【讨论】:
有没有办法摆脱嵌入的第一个视图控制器上的标题栏?只是好奇。 @chris,请参阅我的扩展答案。以上是关于过渡到导航视图控制器的主要内容,如果未能解决你的问题,请参考以下文章