0

我有以下代码:

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

4

1 回答 1

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)。或者呈现的视图控制器仍然可以嵌入到它自己的导航控制器中。无论哪种方式,您都不会获得第一个视图控制器的自动后退按钮,并且需要实现您自己的(仅当一个导航控制器管理一组子视图控制器时才提供后退按钮)。

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

于 2013-09-13T08:32:21.457 回答