【问题标题】:Navigation Item not appearing on View Controller导航项未出现在视图控制器上
【发布时间】:2012-06-09 02:23:25
【问题描述】:

抱歉,我是 iphone 编程新手。

我创建了一个 Master-Detail Iphone 应用程序(因此导航控制器随项目一起提供)。我继续使用我通过 masterviewcontroller 上的 UIBarButtonItem 创建的新视图控制器。然而,与 detailviewcontroller(项目附带)不同,我似乎无法让导航项(或导航栏?)显示在视图上,即使它出现在我的故事板的场景列表中。

这里有一些代码和截图:

在我的 masterviewcontroller.m viewdidload() 函数中

UIBarButtonItem *settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings" style:normal target:self action:@selector(goToSettings:)];
self.navigationItem.leftBarButtonItem = settingsButton;

在我的 masterviewcontroller.m 中

- (IBAction)goToSettings:(id)sender{    
    [self performSegueWithIdentifier:@"SettingsSegue" sender:self];
}

我尝试在我创建的新 viewcontroller.m 类的 viewDidLoad 函数中为导航项添加标题(在此 Link 中提到,但它不起作用)

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.navigationItem.title = @"Settings";
    self.navigationItem.leftBarButtonItem = self.editButtonItem;
}

但它仍然显示在我的故事板中(它显示在场景下的列表中,但不在视图的显示中)

所以我的问题是为什么它现在出现了,我该如何得到它?我想要一个后退按钮,比如主-细节项目附带的细节视图控制器。

编辑#1

我添加了一个检查导航控制器是否为 nil 并且它不是 nil(从未输入 if 语句)我还尝试将导航项更改为 back 并删除,但没有一个工作。

if(self.navigationItem == nil)
{
    [ self.navigationItem init];
}
self.navigationItem.title = @"Settings";
self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;

现在我有足够的声誉来显示图像,我可以显示导航项显示在列表中但未显示在视图中

【问题讨论】:

  • 这里的 if 语句永远不会输入,因为文档说 self.navigationItem 是动态创建的。

标签: iphone ios uiviewcontroller uinavigationcontroller uinavigationitem


【解决方案1】:

导航项也出现在视图控制器场景中,您可以在那里查找并编辑它

【讨论】:

    【解决方案2】:

    你需要有一个导航控制器和一个视图控制器。

    “导航控制器管理界面顶部的导航栏和界面底部的可选工具栏。导航栏始终存在并由导航控制器本身管理,导航栏使用“ https://developer.apple.com/documentation/uikit/uinavigationcontroller

    【讨论】:

      【解决方案3】:

      我的问题是导航控制器不是“初始视图控制器”

      所以我不得不这样做

      【讨论】:

        【解决方案4】:

        请检查您的视图控制器是否是导航控制器的根视图控制器。您不能直接将视图控制器呈现为模态视图控制器。您必须将您的视图控制器作为导航控制器的根视图控制器,然后将您的导航控制器作为模态视图控制器。

        // Create the root view controller for the navigation controller
        // The new view controller configures a Cancel and Done button for the
        // navigation bar.
        YourViewController *addController = [[YourViewController alloc]
                           init];
        
        // Configure the YourViewController.
        
        // Create the navigation controller and present it.
        UINavigationController *navigationController = [[UINavigationController alloc]
                                 initWithRootViewController:addController];
        [self presentViewController:navigationController animated:YES completion: nil];
        

        【讨论】:

          【解决方案5】:

          你必须通过这样做来改变你的 Segue 风格:

          • 在情节提要中选择 Segue;
          • 转到属性检查器(在右侧窗格选项卡上);
          • 将 Style 属性更改为 Push。

          它会使屏幕从右向左滚动,导航栏会出现滑动。 使用 Modal,屏幕从底部到顶部,不会让导航栏出现。

          【讨论】:

            【解决方案6】:

            由于我的 segue 的“样式”,导航项没有显示。

            将场景从主视图控制器移动到设置视图控制器的 segue 设置为“模态”。它必须设置为“推”。这是从实用程序窗格上的情节提要完成的

            【讨论】:

              【解决方案7】:

              您已经验证了 viewDidLoad 方法中列出的导航控制器不是 nil 吗?

              假设您确实有一个非零的self.navigationItem,您似乎错误地将您的self.navigationItem.leftBarButtonItem 设置为editButtonItem,而是尝试将其全部删除!

              如果删除它不能解决问题,请尝试:

              self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;
              

              【讨论】:

                猜你喜欢
                • 2015-06-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-01-03
                • 2018-11-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多