2

在 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,在这种情况下我们如何实现它?

我正在检查所有上述条件,因为我想为视图控制器的推送/弹出操作实现一个功能。

谢谢!

4

0 回答 0