调用 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 的 viewDidLoad
和 viewDidLayoutSubviews
被调用,但 viewWillAppear
未被调用。
我还在控制台中收到以下警告Unbalanced calls to begin/end appearance transitions for <viewController Having collection View>
我不确定自己做错了什么。
甚至用cellForRowAtIndexPath
尝试过,但运气不佳。
【问题讨论】:
【参考方案1】:需要将 ViewController 添加到 UINavigationController
堆栈中!
【讨论】:
以上是关于调用 ViewDidLoad 但未调用 ViewWillAppear的主要内容,如果未能解决你的问题,请参考以下文章
在 endInterruption 调用了 AVAudioSessionDelegate,但未调用 beginInterruption
在苹果的 MultipleDetailViews 示例中调用 numberOfRowsInSection 但未调用 cellForRowAtIndexPath