我的应用程序中有两个视图控制器,例如vc1和vc2。两个视图控制器作为scrollView的子视图,因此用户可以滚动屏幕以切换视图。但是,简单的工具有一个问题:vc1和vc2的viewWillAppear方法只被调用一次。所以我想实现我的滚动容器视图控制器,它可以正确调用viewWillAppear方法,请告诉我如何实现它。
答案 0 :(得分:1)
我不确定你要做什么,但我认为简单的UITableView或UICollectionView对你来说可能更好,因为它们有数据源方法,当视图显示在屏幕上时会自动调用。当您需要返回UITableViewCell或UICollectionViewCell时,可以更新两个视图。
答案 1 :(得分:0)
我不确定这是否有效,但我想你可以检查vc1和vc2的帧是否与scrollView
的委托方法中的屏幕边界一致。
我很确定每次滚动scrollView时都会调用一个方法。在此方法中,您可以检查
//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;
}
抱歉,我现在无法真正测试任何东西。如果你没有想出来,也许我会做些什么并在以后更新答案。你需要同时做到这两点。我相信你可以找到一种更好的方法,将它们包含在一个方法中,或者甚至包含一个变量。
答案 2 :(得分:0)
由于您使用ViewController
添加了滚动视图的子视图,通过ViewController
添加viewDidLoad
viewWillAppear
,viewDidAppear
,ViewController
只会被调用一次,我的意思是这里没有使用viewWillAppear,而是如果你想更新添加的ViewController
中的任何内容,你应该在{{1}}中创建一个公共类,并在需要更新时调用它。