问题描述
我正在尝试将一个参数传递给包含在其中的视图控制器:
// .storybook/main.js
// Imports the app's Webpack Config (change this to require() style with older Node.js versions).
import appWebpackConfig from '../webpack.config.js';
const isCSSRule = (rule) => rule.test.toString() === '/\\.css$/';
module.exports = {
...
webpackFinal: (config) => {
// Removes the existing CSS rule.
config.module.rules = config.module.rules.filter((rule) => !isCSSRule(rule));
// Tells Storybook to use the same CSS rule config as our app.
config.module.rules.push(appWebpackConfig.module.rules.find(isCSSRule));
return config;
}
...
};
let childVC = ChildViewController()
addChild(childVC)
childVC.view.frame = frame
view.addSubview(childVC.view)
childVC.didMove(toParent: self)
具有多个属性,其中之一必须从父视图控制器传递。
ChildViewController
或
let childVC = ChildViewController(someProperty: someProperty)
解决方法
此行:
let childVC = ChildViewController()
几乎总是错误的。这将创建一个ChildViewController
的空实例,其中未设置任何视图,渠道或操作。
通常,您想从Storboard或nibfile实例化视图控制器。
如果您询问如何在子视图控制器的视图中安装内容,答案是“不要这样做”。
如果您希望父视图控制器具有子视图控制器,最简单的方法是将容器视图放在IB中的父视图控制器上。然后,从该容器视图中将控件拖到要成为子视图的视图控制器上,并在出现提示时,选择“ embed segue”作为要创建的链接类型。
这将导致系统在容器视图中安装子视图控制器,并连接所有管道以使其正常工作
在实例化子视图控制器之后但在加载视图之前,将立即调用父视图控制器的prepare(for:sender:)
方法。您可以将代码放入prepare(for:sender:)
方法中,以将值传递给子视图控制器(不直接设置其视图,而是设置属性或调用方法)