使用 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的主要内容,如果未能解决你的问题,请参考以下文章

iOS引导页启动页

iOS引导页启动页

元素在运行时不保留其 Storyboard 可访问性标识符或类型

自动化测试的工具都有哪些

自动化测试的工具都有哪些

UIViewController 中的 UITableView - 将单元格连接到 UIViewController