Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 我是否可以在appdelegate应用程序IDFinishLaunching中插入UINavigationController并将标题设置在nib实例化UITabBarController上方?_Iphone_Objective C_Cocoa Touch_Ios6_Xcode4.6 - Fatal编程技术网

Iphone 我是否可以在appdelegate应用程序IDFinishLaunching中插入UINavigationController并将标题设置在nib实例化UITabBarController上方?

Iphone 我是否可以在appdelegate应用程序IDFinishLaunching中插入UINavigationController并将标题设置在nib实例化UITabBarController上方?,iphone,objective-c,cocoa-touch,ios6,xcode4.6,Iphone,Objective C,Cocoa Touch,Ios6,Xcode4.6,我正在尝试制作一个iPhone应用程序,它有一个可选的顶级导航控制器 添加它可以,但尝试设置标题不起作用,除非您尝试添加自己的导航项,此时应用程序会崩溃,出现“NSInternalInConstructionException”,原因是:“无法在控制器管理的UINavigationBar上直接调用pushNavigationItem:animated:” - (void)applicationDidFinishLaunching:(UIApplication *)application {

我正在尝试制作一个iPhone应用程序,它有一个可选的顶级导航控制器

添加它可以,但尝试设置标题不起作用,除非您尝试添加自己的导航项,此时应用程序会崩溃,出现“NSInternalInConstructionException”,原因是:“无法在控制器管理的UINavigationBar上直接调用pushNavigationItem:animated:”

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    rootHasNavBar = NO; 

    if (window && viewController)
    {

        // Tab Controller is root:
        if (!rootHasNavBar)
        {
           window.rootViewController = viewController; // viewController:UITabBarController
           [window makeKeyAndVisible];
        }
        else
        {
          // Navigation controller  above UITabBarController
          UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
            window.rootViewController = navigationController;
         //Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Cannot call pushNavigationItem:animated: directly on a UINavigationBar managed by a controller.'

          UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:NSLocalizedString(@"RentalPoint",nil)];
          [ navigationController.navigationBar pushNavigationItem:item animated:YES];

            navigationController.toolbarHidden = YES;
          [window makeKeyAndVisible];

        };


    }
我该怎么做?还是有什么技术原因让我不能这么做


更新:建议在控制器的viewDidLoad中简单地移动控制器标题和导航项标题的分配的人关注Cocoa架构的一些内部(对于新手来说非常不直观)方面,这些方面对我来说仍然非常陌生。从外观上看,像Cocoa这样的框架是巨大而复杂的,它不允许您浏览源代码,这是我发现最困难的一种神秘。在我的其他语言和工具中,我总是能够阅读并逐步了解代码,包括我的框架。在这里,你不能,所以你必须读,读,读,谢天谢地,这里有很多很棒的文档源。

在UIViewController的init上设置导航标题

self.title = @"My Title";
self.navigationItem.title = @"Nav Title"; //note: this will show-up in the back button when you push a subsequent view
或者,如果您真的想将其硬编码到ApplicationIDFinishLaunching例程中,您可以执行以下操作:

viewController.title = @"My Title";

我认为作为导航控制器根的选项卡栏控制器是更复杂的情况,所以我在IB中这样做了,为代码保存了更简单的情况。首先,我做了以下工作(全部在IB中):

  • 创建了一个新的单视图项目
  • 删除默认vc并添加导航vc
  • 删除了导航vc的默认根目录(表vc)
  • 绘制了一个选项卡栏控制器,并使其成为根
  • 检查了选项卡栏控制器的导航项,并将其标题设置为“租赁点”
  • 我认为这给了我的应用程序一个“可选案例”,你指的是标签栏控制器,周围是导航控制器(你说的是“在它上面”,但你的代码说的是“在它周围,以它为根”)

    现在,在appDidFinishLaunching中,更简单的情况更容易实现,如下所示

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // if I don't want the optional case, if I just want a tab bar controller as 
        // my window's root, grab it from the navigation controller, and make it the window's
        // root (thereby abandoning the navigation controller)
    
        if (YES) {
            UINavigationController *navVC = (UINavigationController *)self.window.rootViewController;
            self.window.rootViewController = [navVC.viewControllers objectAtIndex:0];
        }
    
        return YES;
    }
    

    如果我的UIViewController是nib安装的,我可以在Interface Builder中设置这些,而无需任何代码,对吗?接受这个答案,因为我发现这是最容易做到的。另一个答案也适用。您能解释一下如何声明和初始化rootHasNavBar吗?viewController怎么样,它在nib/故事板中吗?我觉得奇怪的是,viewController可能是窗口的根vc,然后它也可能被指定为新导航控制器的根vc。viewController是nib实例化的UITabBarController,并且是根控制器,除非我需要上面的UINavigationController。BOOL是从prefs读取的。我想这是我的代码的问题?我希望它在上面直观地显示出来,而不一定是它里面的另一个视图。你肯定是在用选项卡栏控制器作为根来构建导航控制器,这有点不寻常。如果您希望导航控制器“位于”默认用户界面之上,您希望导航控制器的根目录是什么?我知道我在视觉上和逻辑上想要什么(以便能够使用导航控制器使用返回按钮返回此主屏幕)但是不确定我应该使用什么作为应用程序根控制器。因此,我们可以将您的应用程序基本上看作是一个选项卡式应用程序,除非在某些情况下您希望显示一个导航控制器(在顶部,没有主应用程序选项卡可见)。导航控制器应该进行正常的向下搜索,但在根级别有一个“后退”按钮,后退按钮应该关闭导航控制器并再次显示选项卡栏控制器???(这是一口。如果这是你想要的,我想我知道如何做到这一点)。