我有一个带有导航 Controller 和默认RootViewController的程序。如果我没有以编程方式执行任何操作,则该应用程序将启动,并且RootViewController会按我的预期运行,例如以下 Storyboard 所指示的内容:

我遇到的问题是通过合并可选的Start ViewController。我想要的是这样:在我的AppDelegate(didFinishLaunchingWithOptions)中,我想要这样的代码:

UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"OptionalStartViewController"];
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];

首先显示Optional Start ViewController。然后,在用户完成了Optional View Controller 的操作后,他们便可以显示RootViewController。

因此,在可选的Start ViewController中,我添加了如下代码来显示Root View Controller:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"RootViewController"];
[self appDelegate].window.rootViewController = viewController;
[[self appDelegate].window makeKeyAndVisible];

除了RootViewController的(如图所示)不具有预期的导航控件外,所有这些操作都可以进行(即,显示的 View 没有导航控件)。

我也尝试了下面的代码(使用UINavigationController而不是ViewController),结果相同。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
UINavigationController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"];
[self appDelegate].window.rootViewController = viewController;
[[self appDelegate].window makeKeyAndVisible];

另一种扭曲...可能会有几个可选的开始 View Controller 。

有任何想法吗?

最佳答案

  • 删除UINavigationController
  • 选择 Controller (在我们的示例中为“可选的启动 View Controller ”)
  • 单击Editor >> Embed In >> Navigation Controller
  • 现在选择Navigation Controller和Right Side Utility区域,选择选项Is Initial View Controller

  • 如果要动态更改根 View Controller ,则最好以编程方式进行操作,方法是在didFinishLaunchingWithOptions中,获取窗口实例,使用根 View Controller 初始化导航 Controller ,然后将Windows根 View Controller 设置为导航 Controller 。
    这是代码。
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    
        OptionalFirstViewController *optionalFirstViewController = [[OptionalFirstViewController alloc] initWithNibName:@"OptionalFirstViewController" bundle:nil];
        UINavigationController *homeNavigationController = [[UINavigationController alloc] initWithRootViewController:optionalFirstViewController];
        [optionalFirstViewController release];
        self.window.rootViewController = homeNavigationController;
        [homeNavigationController release];
        [self.window makeKeyAndVisible];
    
        return YES;
    }
    

    并确保取消选中 Storyboard上所有 View Controller 的Is Initial View Controller
    希望这可以帮助

    关于ios - 以编程方式使用UINavigationController设置RootViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28457732/

    10-13 04:00