过渡到导航视图控制器

时间:2013-09-13 08:13:13

标签: ios ios6 uiviewcontroller uinavigationcontroller viewcontroller

我有以下代码:

- (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?如果是这样,我如何摆脱这个页面上的顶部栏?

1 个答案:

答案 0 :(得分:1)

现有的View Controller(包含此按钮代码的View Controller)需要包含在导航控制器中。新VC也将包含在同一个Nav Controller中。导航控制器管理这两个子视图控制器之间的标题栏和后退按钮导航。

将第一个VC嵌入导航控制器:

  • 如果使用情节提要,您可以选择视图控制器场景,然后在菜单中选择:Editor > Embed In > Navigation Controller

  • 如果在代码中实例化,首先初始化View Controller,然后将其嵌入到新的nav控制器中:

    UIViewController firstVC;
    firstVC = [[UIViewController alloc] initWithNib:@"nibname" bundle:nil]]   
        //(example of initialising with a xib/nib file)
    UINavigationCOntroller navCon;
    navCon = [UINavigationController alloc] initWithRootViewController:firstVC];
    

    navController

现在,从您的按钮代码中,您要求父导航控制器管理转换:

 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];

或者,您可以在按钮和第二个故事板场景之间创建一个storyboard push segue - 它执行与此代码相同的功能。

如果您只想要第二个VC中的导航栏,而不是第一个VC中的导航栏,则可以使用各种选项。

使用每个视图控制器,您可以单独控制导航控制器的BOOL属性navigationBarHidden - 例如self.navigationController.navigationBarHidden = YES;

但您可能会发现导航栏状态之间的视觉转换不令人满意,并且可能需要考虑其他应用程序设计。例如,您可以显示第一个第二个视图控制器。在这种情况下,vcs都不需要导航控制器,(你的第二个vc可能包含它自己的UINavigationBar)。或者,呈现的视图控制器仍然可以嵌入其自己的导航控制器中。无论哪种方式,您都不会获得第一个视图控制器的自动后退按钮,并且需要自己实现(仅当一个导航控制器管理子视图控制器数组时才提供后退按钮)。

这些只是一些建议,您将不得不使用这些以及其他想法来找出对您的应用最有意义的建议。