【问题标题】:changing rootviewcontroller of a UINavigationController which is in storyboard while its initialised更改初始化时位于情节提要中的 UINavigationController 的 rootviewcontroller
【发布时间】:2015-10-05 09:12:47
【问题描述】:

我在故事板中有一个UINavigationController 控制器,它是入口点,其类是MyNavigationController。 我没有从情节提要中将rootviewcontroller分配给UINavigationController,但想从MyNavigationController分配相同的值,通过一些初始化方法 请帮助我如何做到这一点,还是不可能?

【问题讨论】:

  • 你的问题不清楚,否则用initialwithidentifier,否则找顶层控制器
  • 是否不能通过覆盖'MyNavigationController'中的任何方法来实现?
  • 你使用 stroyboard 或 xib 并且你在 Objective - c 或 swift 中工作
  • 我正在使用故事板和目标 c
  • 感谢 Anbu.Karthik 的编辑。

标签: ios uinavigationcontroller storyboard


【解决方案1】:

选择-1

您可以识别您的故事板 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

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

您可以使用属性在视图控制器上识别您的故事板 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

你可以得到如下输出

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

【讨论】:

  • 有没有可能这样做MyNavigationController
  • MyNavigationController 如问题中所述
  • 我正在探索您在答案中提到的第二个选项,如果仅此一项就可以在代码中完成。
  • 那么你就可以轻松识别了,使用Choice -1
  • 是的,我尝试过并且可以工作,但只是编码的第二个选项。如果这没有意义,请多多包涵。但只想分配第二步中提到的 rootviewcontroller 来完成通过代码
【解决方案2】:

如果我理解正确并且您希望使用给定的视图控制器对其进行初始化,那么您将 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

【讨论】:

  • 我不想在故事板上使用MyNavigationController *myNavigationController = [[MyNavigationController alloc] init];,它是入口点,只想单独分配或分配rootviewcontroller
  • 我手机里的年轻。你见过 setViewControllers 方法吗?
  • 你可以调用[myNavigationController setViewCobtrollers:@[myRootViewController]];
  • 你的 init 方法应该是这样的:- (instancetype)init { self = [super init]; [self setViewCobtrollers:@[myRootViewController]]; return self; } 抱歉格式化
  • 已经试过了。这不会被调用,我认为initwithcoder会被调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 2012-01-12
  • 2012-10-12
相关资源
最近更新 更多