UIPageViewController 将先前的 ViewController 保持在视图的背景上
Posted
技术标签:
【中文标题】UIPageViewController 将先前的 ViewController 保持在视图的背景上【英文标题】:UIPageViewController keeping previous ViewController on the Background of the view 【发布时间】:2015-02-28 17:57:55 【问题描述】:我有一个 UIPageViewController,我以编程方式启动它,我已经覆盖了 viewControllerBeforeViewController 和 viewControllerAfterViewController 方法,以便在每次翻转后动态创建视图控制器。问题是当我没有完成翻页移动并且前一个视图控制器返回视图时,相同的视图控制器仍保留在视图的背景上,从而弄乱了我正在显示的内容。我尝试使用 UIPageViewController 委托 pageViewController didFinishAnimating 的回调方法,在这个方法中,我得到了我想要得到的消息,所以当动画没有完成时,我可以对它做出反应,但是当我通过设置其当前视图控制器刷新 UIPageViewController 时,问题仍然存在,这里是代码:
(void)pageViewController:(UIPageViewController *)pageViewController
didFinishAnimating:(BOOL)finished
previousViewControllers:(NSArray *)previousViewControllers
transitionCompleted:(BOOL)completed
if (!completed)
[self viewDidAppear:NO];
for (UIViewController* vc in previousViewControllers)
[self setViewControllers: @[vc]
direction: UIPageViewControllerNavigationDirectionForward
animated: NO
completion: nil];
return;
问题是:我怎样才能“清理”或“刷新”或“清除”我的 UIPageViewController 的内容以删除剩余视图并仅显示预期的视图。
【问题讨论】:
【参考方案1】:我有/遇到过类似的问题。我使用一个 UIPageViewController,它可以根据帐户(可切换)加载不同的 PageContentView。我正在使用以下代码删除在某种程度上有效的现有 PageContent:
[[self.pageViewController.childViewControllers objectAtIndex:0] willMoveToParentViewController:nil];
[[self.pageViewController.childViewControllers objectAtIndex:0].view removeFromSuperview];
[[self.pageViewController.childViewControllers objectAtIndex:0] removeFromParentViewController];
但是当我滑动到不是第一个屏幕的屏幕,然后更改 UIPageViewController/PageContentView 时,我可以看到新内容后面的现有内容。
我仔细研究了一下,发现在 UIViewController 的子视图中有一个名为 _UIPageViewControllerContentView 的对象。
所以我写了这段代码来删除它,它似乎有帮助。
for (id obj in self.view.subviews)
if ([[NSString stringWithFormat:@"%@", [obj class] ] isEqualToString:@"_UIPageViewControllerContentView"])
[obj removeFromSuperview];
希望这会有所帮助。
【讨论】:
以上是关于UIPageViewController 将先前的 ViewController 保持在视图的背景上的主要内容,如果未能解决你的问题,请参考以下文章
将页面控件设置到 UIPageViewController 的顶部
以编程方式将 UIPageViewController 过渡样式设置为滚动
将 UINavigationController 添加到 UIPageViewController
如何将数据从 UIPageViewController 传递到它的“子视图”之一?