Как использовать одно и то же представление [Раскадровка] для нескольких вкладок и просто изменять его в зависимости от выбранной вкладки? (iOS)

Я знаю, что этот вопрос сформулирован странно, но позвольте мне объяснить, что я пытаюсь сделать:

Допустим, у меня есть приложение с двумя вкладками, каждая со своим видом. Оба представления почти одинаковы, за исключением того, что одно содержит одну или две кнопки, которых нет в другом, и наоборот.

Я уже сделал одно представление в режиме раскадровки, теперь я хочу немного изменить его и повторно использовать то же представление для другой вкладки.

Я не хочу делать глубокую копию, потому что, если я изменю один, мне придется изменить другой, и это может привести к некоторому несоответствию между ними.

Итак, как мне использовать одно и то же общее представление для нескольких вкладок и просто изменить некоторые детали в зависимости от того, на какой вкладке я нахожусь?

Должен ли я добавить универсальный контент в виде раскадровки, а затем программно добавить конкретный контент с эксклюзивной вкладкой? Если бы я сделал это, мне нужен был бы способ определить, какая вкладка выбрана, верно? Есть ли способ сделать это?

Спасибо за любые предложения!


person giant91    schedule 20.07.2013    source источник


Ответы (1)


Для этого вам не нужна раскадровка. Конечно, вы можете перетащить туда представление и назначить его определенному классу и запрограммировать все в нем, но если вам действительно нужно только одно представление, раскадровка бесполезна. Вы должны иметь дело с подпредставлениями программно, если хотите что-то изменить. Это очень хорошо, и у вас есть отличные функции, такие как animationWithDuration:

Чтобы проверить, какая вкладка выбрана в вашем UITabBarController, вы можете использовать self.tabBarController.selectedIndex и сравнить ее с заданным индексом выбранной вкладки.

ИЗМЕНИТЬ:

Если предположить, что у вас есть зеленая кнопка на вкладке с индексом 0, и та же кнопка должна скользить немного выше, а красная кнопка должна появиться там, где зеленая кнопка при нажатии на вкладку с индексом 1.

UIButton *greenButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 320, 100, 20)];
    greenButton.backgroundColor = [UIColor greenColor];
    [self.view addSubview:greenButton];


    UIButton *redButton = [[UIButton alloc] initWithFrame:CGRectMake(0, greenButton.frame.origin.y, 100, 20)];
    greenButton.backgroundColor = [UIColor redColor];

    if (self.tabBarController.selectedIndex == 1) {
        [UIView animateWithDuration:1.0 animations:^{
            greenButton.frame = CGRectMake(0, 300, 100, 20);
        } completion:^(BOOL finished) {
            [self.view addSubview:redButton];
        }];
    }

Сначала вы создаете две кнопки и добавляете зеленую в представление. (Первое представление находится в индексе 0). Затем вы проверяете, равен ли selectedIndex 1 и анимируете кнопки вокруг.

person Sebastian    schedule 20.07.2013
comment
Мое реальное приложение имеет около 10-15 просмотров, я просто сказал, что у него 2 просмотра, так что это не слишком усложняет ситуацию. Я создал его в режиме раскадровки, потому что он довольно подробный и перекомпилировать его каждый раз, когда я что-то меняю, требуется вечность. Но это то, о чем я спрашивал: как мне программно изменить подвиды в зависимости от выбранной вкладки? Это возможно? - person giant91; 21.07.2013
comment
Ах, спасибо! Я только что видел ваше редактирование, +1 для «self.tabBarController.selectedIndex» - person giant91; 21.07.2013
comment
См. мое редактирование выше для программной анимации подвидов. - person Sebastian; 21.07.2013