调用 ViewDidLoad 但未调用 ViewWillAppear

Posted

技术标签:

【中文标题】调用 ViewDidLoad 但未调用 ViewWillAppear【英文标题】:ViewDidLoad is called but ViewWillAppear not called 【发布时间】:2017-02-14 15:54:18 【问题描述】:

基本上,我有一个集合视图,cell.contentView 在集合视图的willDisplayCell 中添加了一个 ViewController 的视图,如下所示:

-(void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath 
    UIViewController *vc = [self.viewControllerArray objectAtIndex:indexPath.row];
   [self displayContentController:vc inView:cell];


- (void)displayContentController:(UIViewController *)viewController inView: (UICollectionViewCell *)cell 
   [self addChildViewController:viewController];
   viewController.view.frame = cell.bounds;
   [cell.contentView addSubview:viewController.view];
   [viewController didMoveToParentViewController:self];

现在,这个 ViewController 有一个 tableView。在tableview 的didSelectRowAtIndexpath 中,我正在推送一个New ViewController。

令人惊讶的是,推送的 ViewController 的 viewDidLoadviewDidLayoutSubviews 被调用,但 viewWillAppear 未被调用。

我还在控制台中收到以下警告Unbalanced calls to begin/end appearance transitions for <viewController Having collection View>

我不确定自己做错了什么。

甚至用cellForRowAtIndexPath 尝试过,但运气不佳。

【问题讨论】:

【参考方案1】:

需要将 ViewController 添加到 UINavigationController 堆栈中!

【讨论】:

以上是关于调用 ViewDidLoad 但未调用 ViewWillAppear的主要内容,如果未能解决你的问题,请参考以下文章

Jest Vue 预期的模拟函数已被调用,但未调用

在 endInterruption 调用了 AVAudioSessionDelegate,但未调用 beginInterruption

在苹果的 MultipleDetailViews 示例中调用 numberOfRowsInSection 但未调用 cellForRowAtIndexPath

方法被调用但未执行

mapStateToProps,但未调用componentDidUpdate

函数被调用但未执行