【问题标题】:how to make a custom scroll container view controller?如何制作自定义滚动容器视图控制器?
【发布时间】:2013-08-03 17:18:07
【问题描述】:

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

【问题讨论】:

    标签: ios uiviewcontroller


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我不确定这是否可行,但我想您可以在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;
      }
      

      抱歉,我现在无法真正测试任何东西。如果您还没有弄清楚,也许我会做一些事情并稍后更新答案。你需要两者都做。我相信您可以找到一种更好的方法,将两者都包含在一个方法中,甚至包含一个变量。

      【讨论】:

        【解决方案3】:

        由于您通过添加滚动视图的子视图使用ViewController,因此通过添加ViewController 这样viewDidLoadviewWillAppearviewDidAppear 只会被调用一次,我的意思是这里没有使用 viewWillAppear因此,如果您想更新添加的ViewController 中的任何内容,您应该在ViewController 中创建一个公共类,并在需要更新时调用它..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-15
          • 2023-03-25
          • 1970-01-01
          • 2021-12-31
          • 2013-02-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多