从 UIPageViewController 中删除之前添加的 viewController
Posted
技术标签:
【中文标题】从 UIPageViewController 中删除之前添加的 viewController【英文标题】:Delete previously added viewControllers from the UIPageViewController 【发布时间】:2013-04-24 13:50:24 【问题描述】:我正在使用一个数组在 UIPageViewController 上添加一些 viewController。问题是当您进一步滑动时它们会留在内存中,我想删除它们。我找到了这个委托方法:
- (void)pageViewController:(UIPageViewController *)pvc didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
// If the page did not turn
if (!completed)
return;
// This is where I want to delete the previousViewControllers to release memory
但是如何删除那些previousViewControllers?如果您向后滚动,它们需要重新加载,但我需要删除它们,否则它们会一直留在内存中。
【问题讨论】:
UIPageViewController 最多应该挂在 3 个控制器上(当前、上一个、下一个),并且你永远不应该(实际上也不能)删除它所持有的那些。如果您的控制器停留的时间比这更长,可能是因为您在添加它们的数组中保留了对它们的引用。将它们提供给 UIPageViewController 后,您应该能够安全地将任何指向 viewController 的指针设置为 nil,因为 UIPageViewController 保留了指向它们的强指针。 【参考方案1】:我从未使用过UIPageViewController
,但似乎previousViewControllers
是只读的。我要做的是向之前的 ViewController 发送一条消息,告诉它们重新加载。
例如,我相信这将访问显示的最后一个 ViewController:
MyVC *lastVC = (MyVC*)[previousViewControllers objectAtIndex:[previousViewControllers count]-1];
lastVC.reloadFlag = YES; // Assuming you have a reloadFlag property in your MyVC class
所以你可以把它放在你问题中的方法中。
然后确保在您返回 ViewController 时在您的 MyVC *
对象中调用 viewWillAppear
,如果是,请在其中放入一个简单的东西:
if(_reloadFlag)
//updateUI
这只是一个想法,您可能需要更改一些内容才能使其发挥作用。
【讨论】:
问题是添加到 UIPageViewController 上的 viewController 来自不同的类,例如不仅“MyVC”,还有 MyVC2、MyVC3、MyVC4 等...... 也许你可以让你所有的 VC 类都继承自一个超类,该超类将标志作为一个属性? 或者您将标志添加到所有类(如果没有太多)并使用 [lastVC isKindOfClass:@"..."] 检查类?以上是关于从 UIPageViewController 中删除之前添加的 viewController的主要内容,如果未能解决你的问题,请参考以下文章
将删除滑动手势从 UIPageViewController 传递给 UITableView
IOS 如何从其子级访问 uipageviewcontroller?
如何将数据从 UIPageViewController 传递到它的“子视图”之一?
从 UIPageViewController 中删除之前添加的 viewController
从 Swift 3 中的 UIPageViewController 中删除黑边
从 UIPageViewController 模态显示 UINavigationController 会锁定 iOS 9