【发布时间】:2013-08-03 17:18:07
【问题描述】:
我的应用中有两个视图控制器,例如 vc1 和 vc2。这两个视图控制器作为一个滚动视图的子视图,因此用户可以滚动屏幕来切换视图。但是,简单的实现有一个问题:vc1和vc2的viewWillAppear方法只调用了一次。所以我想实现我的滚动容器视图控制器,它可以正确调用viewWillAppear方法,请告诉我如何实现它。
【问题讨论】:
标签: ios uiviewcontroller
我的应用中有两个视图控制器,例如 vc1 和 vc2。这两个视图控制器作为一个滚动视图的子视图,因此用户可以滚动屏幕来切换视图。但是,简单的实现有一个问题:vc1和vc2的viewWillAppear方法只调用了一次。所以我想实现我的滚动容器视图控制器,它可以正确调用viewWillAppear方法,请告诉我如何实现它。
【问题讨论】:
标签: ios uiviewcontroller
我不确定您要做什么,但我认为简单的 UITableView 或 UICollectionView 可能更适合您,因为它们具有数据源方法,当视图显示在屏幕上时会自动调用该方法。当您需要返回 UITableViewCell 或 UICollectionViewCell 时,您可以更新您的两个视图。
【讨论】:
我不确定这是否可行,但我想您可以在scrollView 的委托方法中检查 vc1 和 vc2 的帧是否符合屏幕边界。
我很确定每次滚动滚动视图时都会调用一个方法。在这个方法中,你可以检查
//put this in your .h or something
BOOL vc1IsVisible = true;
//in the scrollView delegate-method that is called upon scrolling
if([self isInsideView:vc1])
{
if(!vc1IsVisible)
{
vc1IsVisible = true;
[vc1 viewDidAppear:NO]; //or whatever it is for animation
}
}
else
{
if(vc1IsVisible)
vc1IsVisible = false
//and viewDidDisappear?
}
然后在这样的地方创建一个方法
-(BOOL)isInsideView:(UIViewController*)vc
{
//Check if vc.origin.y is greater than scrollView.size.height or something maybe?
//You can probably also try using the scrollView's contentOffset and use that
//relative to the viewController's sizes.
//if the viewControllers bounds are withing the scrolls bounds, return YES;
//else, return NO;
}
抱歉,我现在无法真正测试任何东西。如果您还没有弄清楚,也许我会做一些事情并稍后更新答案。你需要两者都做。我相信您可以找到一种更好的方法,将两者都包含在一个方法中,甚至包含一个变量。
【讨论】:
由于您通过添加滚动视图的子视图使用ViewController,因此通过添加ViewController 这样viewDidLoad、viewWillAppear、viewDidAppear 只会被调用一次,我的意思是这里没有使用 viewWillAppear因此,如果您想更新添加的ViewController 中的任何内容,您应该在ViewController 中创建一个公共类,并在需要更新时调用它..
【讨论】: