在初始化时更改情节提要中的 UINavigationController 的 rootviewcontroller

changing rootviewcontroller of a UINavigationController which is in storyboard while its initialised

我在故事板中有一个 UINavigationController 控制器作为入口点,它的 class 是 MyNavigationController。 我没有从故事板中将 rootviewcontroller 分配给 UINavigationController,但想从 MyNavigationController 中分配相同的内容,通过一些初始化方法 请帮助我如何做到这一点,或者这是不可能的?

如果我理解正确并且您希望使用给定的视图控制器对其进行初始化,那么您将 UINavigationController 子类化了。

您可以在 MyNavigationController 中覆盖 init 并调用 [super initWithRootViewController:myRootViewController],其中 myRootViewController 是 UIViewController 或其子类的实例。

然后您可以这样使用 MyNavigationController

MyNavigationController *myNavigationController = [[MyNavigationController alloc] init];

有关详细信息,请参阅:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UINavigationController_Class/#//apple_ref/occ/instm/UINavigationController/initWithRootViewController:

选择-1

您可以识别您的 Storyboard ID 并设置为 Root

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"LoginSignupVC"];
[[UIApplication sharedApplication].keyWindow setRootViewController:rootViewController];
}

选择 2

初始视图控制器会自动识别您的根控制器

您可以使用属性

在您的 viewcontroller 上识别您的 Storyboard ID

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
MyNavigationController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"LoginSignupVC"];
[[UIApplication sharedApplication].keyWindow setRootViewController:rootViewController];
}

选择 3

xcode --> 菜单 -> 编辑器 -> embedIn -> NavigationController

你可以得到如下输出

它会自动找到您的根控制器