在 Objective-C 中
我们可以从字符串创建类并初始化其对象以推送导航堆栈,例如:
Class myClass = NSClassFromString("ClassString");
id myObject = [[myClass alloc] initWithNibName:"ClassString" bundle:nil];
[self.navigationController pushViewController:myObject animated:YES];
swift 中的等效代码是什么?
在斯威夫特我试过:
let ClassName = NSClassFromString("ClassString")
let myObject = ClassName.init(... ) // <- here I'm unable to init with nib name
如何使用从 NSClassFromString 创建的类来初始化对象?
更新
在 Martin 的评论链接的帮助下,我能够解决 Nib/XIB 的问题。但是如何为 stoyboard 做呢?
let mainStoryboard:UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
let myVC = mainStoryboard.instantiateViewController(withIdentifier: "SomeID") as ClassName // <- here I'm getting error
self.navigationController.pushViewController(myVC, animated: true)
更新 2
我尝试从该行中删除“as ClassName”并且它工作正常。到目前为止,使用 nib 和 storyboard 推送视图控制器已经完成。现在我希望它在没有两者或框架的情况下被推动。
这段代码很好,但是当它被推送时,它显示为空白和黑色:
let myVC = ClassName.init()
self.navigationController?.pushViewController(myVC, animated: animate)
解决办法是什么 ?如果它的 init with frame,在这种情况下我们如何实现它?
我正在检查所有上述条件,因为我想为视图控制器的推送/弹出操作实现一个功能。
谢谢!