我在我的故事板文件中设置了一个容器视图,但是我想在设置一些属性后以编程方式嵌入视图控制器。这是我在父VC的viewDidLoad中的代码:
_workoutVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"entryTableVC"];
_workoutView = _workoutVC.tableView;
[self addChildViewController:_workoutVC];
[_workoutVC.tableView setFrame:_container.bounds];
[_container addSubview:_workoutView];
然而,子进程中的viewDidLoad在任何时候都不会被调用,当我运行模拟器时,我的容器视图是空的,我已经在调试器中检查了我的属性都不是nil
。
7条答案
按热度按时间qrjkbowd1#
如果你没有使用嵌入式segue,而是手动添加子视图控制器,为什么要使用容器视图呢?
yxyvkwin2#
viewDidLoad:
方法是第一次访问view
属性时调用的,我假设您的情况是view
==tableView
,如果不是,则需要调整子VC的loadView
方法。然后使用
view
属性代替tableView
。编辑:
完整代码为:
yv5phkfx3#
(斯威夫特2)因为这个问题没有一个公认的答案......
我最终做的是在子视图控制器上创建一个方便的init:
在父视图控制器的**viewDidLoad()**中:
我使用了一个简单的UIView,而不是UIContainerView,但它是相似的。
kuuvgm7e4#
我也有过类似的情况,我在容器视图控制器中使用了普通的UIView(与Xcode提供的“容器视图”相反)。
我使用的事件顺序是:
这是一个舞蹈,但它允许我以编程方式设置子视图控制器,并确保在子视图控制器上调用-viewDidLoad。此外,您应该能够在此之后设置一些属性。
x8diyxa75#
很抱歉,现在已经很晚了,但是我刚刚遇到了这个问题。这是InterfaceBuilder的一个模糊问题,有时候它不能为自定义类创建完整的信息,所以segue找不到控制器类。
在我的例子中,我有两个嵌入了TableViewControllers的相同视图。第一个可以工作,第二个不行。当我把故事板作为源代码检查时,我发现第二个缺少一些额外的信息,当我添加它时,viewDidLoad被调用了。为了解决这个问题
1)将情节提要作为源代码打开。
2)搜索以查找嵌入式视图控制器的customClass
2)在它后面添加以下值(MyAppProject应该是项目的名称,target只是target)。
嵌入式控制器现在应该触发viewDidLoad并正常工作。
mnemlml86#
“我想在设置了一些属性后以编程方式嵌入视图控制器”---你不能这么做。如果你有一个容器视图,你会自动得到一个嵌入其中的视图控制器,并且它的viewDidLoad会在父控制器的viewDidLoad之前被调用。如果你想设置嵌入控制器的一些属性,你可以在父控制器的prepareForSegue中完成。
dnph8jn47#
任何可能还有同样问题的人。
我遇到过类似的情况,通过调用loadView()解决了这个问题。
然后我就可以访问视图中的所有内容。