Динамически назначать представления для просмотра с прокруткой - PullRequest
0 голосов
/ 03 августа 2011

У меня есть UIScrollView и пять UIViewController с A, B, C, D, E.Порядок UIViewController представлений, которые должны отображаться в представлении прокрутки, зависит от некоторого предварительного условия (например, однажды это может быть B, A, E, D, C и следующие E, A, D, B, C ии т. д.)

Как я могу отслеживать, какие UIViewController должны отображаться (как что-то вроде тегов для каждого UIViewController, которые могут храниться в массиве и обновляться)?Можно ли назначить представления для вида прокрутки в динамическом режиме, показанном выше?

1 Ответ

0 голосов
/ 03 августа 2011

вы хотите разобрать способ перестановки 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
...