【问题标题】:Dynamically assign views to Scroll View动态地将视图分配给滚动视图
【发布时间】:2011-08-03 07:41:36
【问题描述】:

我有一个 UIScrollView 和五个 UIViewControllers A、B、C、D、E。 UIViewController 视图在滚动视图中显示的顺序取决于一些先决条件(例如,有一天它可能是 B、A、E、D、C 和下一个 E、A、D、B、C 和等等)。

如何跟踪要显示的UIViewController(就像每个UIViewController 的标签一样,可以存储在数组中并更新)? 是否可以以上面显示的动态方式将视图分配给滚动视图?

【问题讨论】:

  • 您将在视图控制器中显示哪些数据??
  • 表格视图很常见..有些会有额外的分段控件和按钮..有关系吗?
  • 是的,我的意思是如果不同视图之间的数据非常相似,那么只需使用五个 UIViews 而不是 UIViewControllers。
  • 只有一个 uiview 我什么都做不了......需要一个视图控制器来识别事件并导航到下一个视图对吗?
  • 不,您可以将所有 UIView 放在一个控制器中,它会正常工作。我告诉 bcz 您想在单个 UIScrollView 中加载所有视图,如果该滚动视图不重要,则只需使用导航控制器和五个控制器。继续随机加载新控制器。

标签: iphone objective-c ios4 uiviewcontroller uiscrollview


【解决方案1】:

您想找出一种方法来排列 5 个视图控制器吗? 也许它有助于使用素数的属性。

这取决于您想要的排列数。 但是由于只有 5 个视图控制器,所以不能超过 5 个! = 120 个排列 5 的好处在于它是一个质数

所以如果你计算 (n*a) % 5,其中 a 是从 0 到 4 的常数,n 是从 1 到 5 的变量,你会得到这样的表格:

a==0,  0,0,0,0,0
a==1,  1,2,3,4,0
a==2,  2,4,1,3,0
a==3,  3,1,4,2,0
a==4,  4,3,2,1,0

如您所见,这是 5 种完全不同的排列,其中每个数字只出现一次。

所以,如果你想有 120 个排列

只需应用一个常量 b(从 0 到 4),然后计算 (n*a + b) % 5

那么你会得到上一个结果的 5 倍,也就是 125 ,但是有一些重复,那么最终的结果将是 120 个排列。

所以,您唯一需要做的就是根据您的先决条件确定 a 和 b

并应用以下代码:

int result = (n*a + b)%5;
static UIView *addedView = nil;
if(addedView != nil)
    [addedView removeFromSuperview];

switch(result)
{
    case 0:
        [self.scrollView addSubview:VCA.view];
        addedView = VCA.view;
        break;
    case 1:
        [self.scrollView addSubview:VCB.view];
        addedView = VCB.view;
        break;

    //and so on...
 }

hope it helps

【讨论】:

  • 我会试着检查一下...谢谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
相关资源
最近更新 更多