问题
我开始在 Xcode 6
上看一下新的 Swift
,我尝试了一些演示项目和教程 . 现在我被困在:
Instantiating and then presenting a viewController from a specific storyboard
Objective-C解决方案
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboardName" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"myVCID"];
[self presentViewController:vc animated:YES completion:nil];
如何在Swift上实现这一目标?
14 回答
斯威夫特4:
这一切都是新语法的问题,功能没有改变:
如果您遇到
init(coder:)
的问题,请参阅EridB's answer .对于使用@akashivskyy's answer来实例化
UIViewController
并且有异常的人:Quick tip:
在您尝试实例化的目标
UIViewController
上手动实现required init?(coder aDecoder: NSCoder)
如果您需要更多描述请参考我的回答here
This link has both the implementations:
迅速:
目标C.
This link has code for initiating viewcontroller in the same storyboard
akashivskyy的答案很好!但是,如果您从显示的视图控制器返回时遇到一些问题,则此替代方法可能会有所帮助 . 它对我有用!
迅速:
OBJ-C:
当我把它放在AppDelegate中时,这对我来说很好
如果你想以模态方式呈现它,你应该有类似下面的东西:
如果你有一个不使用任何storyboard / Xib的Viewcontroller,你可以像下面这样调用这个特定的VC:
我知道这是一个旧线程,但我认为当前的解决方案(使用给定视图控制器的硬编码字符串标识符)非常容易出错 .
我已经创建了一个构建时脚本(你can access here),它将创建一个编译器安全的方法来访问和实例化给定项目中所有storyboard的视图控制器 .
例如, Main.storyboard 中名为 vc1 的视图控制器将实例化为:
斯威夫特3
无论我尝试什么,它都不适合我 - 没有错误,但我的屏幕上也没有新的视图控制器 . 不知道为什么,但将它包装在超时功能中最终使其工作:
我想建议一个更清洁的方式 . 当我们有多个故事板时,这将非常有用
1.Create a structure with all your storyboards
2. Create a UIStoryboard extension like this
将故事板标识符作为类名称,并使用以下代码进行实例化
我创建了一个库,可以通过更好的语法更轻松地处理这个问题:
https://github.com/Jasperav/Storyboardable
只需更改Storyboard.swift,让
ViewControllers
符合Storyboardable
.Swift 4.2更新了代码