从具有相同 ViewController 类的相同情节提要中调用第二个视图
Posted
技术标签:
【中文标题】从具有相同 ViewController 类的相同情节提要中调用第二个视图【英文标题】:Call a second view from the same storyboard with the same ViewController class 【发布时间】:2018-02-13 09:34:29 【问题描述】:我在主情节提要中使用相同的视图控制器类创建了第二个视图控制器。我为此视图创建了一个出口。
如果单击了按钮,我想在第一个视图上添加第二个视图。 我怎么称呼这第二个视图?
secondViewController的代码:
@IBOutlet weak var secondView: UIView!
override func viewDidLoad()
super.viewDidLoad()
self.view = secondView
override func loadView()
super.loadView()
// Fatal error: Unexpectedly found nil while unwrapping an Optional value
self.view.addSubview(informationView)
firstViewController 的代码,这里我调用了 secondView 并将其放在一个平面中:
let secondViewController:UIViewController = SecondViewController()
let plane = SCNPlane(width: CGFloat(0.1), height: CGFloat(0.1))
plane.firstMaterial?.diffuse.contents = secondViewController.view
我只得到一个白屏,也没有显示背景颜色。
【问题讨论】:
你想让 secondViewcontroller 在 firstViewController 里面吗?或者,从 firstViewController 移动到 secondViewcontroller ?/ ***.com/questions/37771001/…的可能重复 是的,我在 firstViewController 中调用了 secondViewController。但是第二个视图控制器的视图没有显示,它是白色的。那么如何在第一个视图上加载第二个视图? 不确定您想要实现什么,但您的代码中有一些问题:1)您没有在 viewDidLoad 中分配 self.view(为时已晚 - 如果需要,请在 loadView 中执行) 2) 你不能调用 super.loadView() (查看文档) 3) 是的,你得到一个致命错误,因为视图还没有在 loadView 中创建——你只有在你想自己分配 self.view 时才覆盖这个人。您应该改为在 viewDidLoad 中添加子视图。 @tanzolone 非常感谢!如果我将 addSubview 添加到 viewDidLoad 我会收到以下错误:线程 1:EXC_BAD_ACCESS (code=2, address=0x16ef83fe0) 【参考方案1】:1:你应该像这里一样为你的视图控制器设置一个故事板ID
2:那么你应该像这样实例化它:
guard let secondViewController = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as? MyViewControllerClass else return
然后用你的 secondViewController 做你想做的一切。
【讨论】:
以上是关于从具有相同 ViewController 类的相同情节提要中调用第二个视图的主要内容,如果未能解决你的问题,请参考以下文章
无法在具有相同元素的 viewController 上方的模式上断言元素