繁体   English   中英

如何制作自定义滚动容器视图控制器?

[英]how to make a custom scroll container view controller?

我的应用程序中有两个视图控制器,例如vc1和vc2。 这两个视图控制器作为scrollView的子视图,因此用户可以滚动屏幕以切换视图。 但是,简单的实现有一个问题:vc1和vc2的viewWillAppear方法仅被调用一次。 所以我想实现我的滚动容器视图控制器,它可以正确调用viewWillAppear方法,请告诉我如何实现它。

我不确定您要做什么,但是我认为简单的UITableView或UICollectionView可能对您更好,因为它们具有数据源方法,当视图在屏幕上显示时,它们会自动调用。 当需要返回UITableViewCell或UICollectionViewCell时,可以更新两个视图。

我不确定这是否行得通,但我想您可以在scrollView的委托方法中检查scrollView的框架是否与屏幕的边界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;
}

抱歉,我现在无法真正测试任何内容。 如果您还没有弄清楚,也许我会做点什么,然后再更新答案。 而且您需要同时使用两者。 我敢肯定,您可以找到一种更好的方法,既可以在此方法中同时包含一个变量,也可以包含一个变量。

由于您使用ViewController通过将其添加滚动视图的子视图,通过添加ViewController这样viewDidLoadviewWillAppearviewDidAppear会被调用一次,我的意思是有没有用viewWillAppear中的位置正因为如此,而如果你想以更新添加任何东西ViewController您应该在ViewController创建一个公共类,并在需要更新时调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM