使用 Storyboard 时不通过 Storyboard 推送 ViewController
Posted
技术标签:
【中文标题】使用 Storyboard 时不通过 Storyboard 推送 ViewController【英文标题】:Push a ViewController not through Storyboard while working with Storyboard 【发布时间】:2014-10-22 08:28:28 【问题描述】:我在整个互联网上搜索了我的问题,但显然是愚蠢的找不到任何东西。
在我的应用程序中,我正在使用 Storyboard,并且我的大部分 ViewController 都以这种样式加载(我正在使用导航控制器):
MyViewControllerClass *viewController = [storyboard instantiateViewControllerWithIdentifier:@"myViewController"];
[self.navigationController pushViewController:viewController animated:YES];
现在我的问题是:是否可以在不使用情节提要的情况下将 VC 推送到代码中?就像在过去一样,但这对我来说不再适用了:
MyViewControllerClass *viewController = [[MyViewControllerClass alloc] init];
[self.navigationController pushViewController:viewController animated:YES];
请帮帮我,我快疯了。
提前致谢。
【问题讨论】:
必须在应用委托中添加导航才能正常工作,相信我 在什么情况下不起作用?是推送一个空视图,还是什么都不推送? 推送动画有点疯狂,推送的视图只是黑色。 有趣的动画/黑色视图是因为您没有在代码中正确设置视图。你打算完全用代码为这个视图控制器创建视图,还是你有它的笔尖?将self.view.backgroundColor = [UIColor whiteColor];
添加到视图控制器的viewdidLoad
将停止此操作,但可能无法完全解决您的问题。
【参考方案1】:
是的,你可以不使用故事板来做到这一点,你只需要像这样在应用程序委托中添加导航控制器,之后它就可以正常工作了
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.window.rootViewController=navigationController;
[self.window makeKeyAndVisible];
return YES;
【讨论】:
【参考方案2】:您可以创建 xib 文件并推送它。没有视觉就无法推动。
ViewControllernew* vv = (ViewControllernew*)[[[NSBundle mainBundle] loadNibNamed:@"ViewControllernew" owner:self options:nil] objectAtIndex:0];
[self.navigationController pushViewController:vv animated:YES];
【讨论】:
你这是什么意思?我只想在代码中创建接口,然后创建实例并推送它。这不可能吗? “没有视觉就无法推动”是什么意思? 没有 xib 文件或情节提要。 您可以创建视图控制器的实例,而无需从 xib 或情节提要中加载视图。您可以通过编程方式创建视图。【参考方案3】:可以确认它确实有效。 如果 viewController 为 nil,Push 将以这种方式运行。你的 alloc init 是否真的创建了一个实例?
【讨论】:
以上是关于使用 Storyboard 时不通过 Storyboard 推送 ViewController的主要内容,如果未能解决你的问题,请参考以下文章