Должны ли мы избегать цикла push segue между двумя представлениями?

Что ж, для некоторых из вас этот вопрос может показаться смешным, но я обсуждаю со своими товарищами по команде дизайн приложения для iOS, и мне нужно ваше мнение по этому поводу.

Старый дизайн, с которым я не согласен, выглядит следующим образом

  • У нас есть ViewControllerA, который содержит кнопку «Перейти к B». Кнопка имеет переход PUSH для перехода к B.
  • У нас есть ViewControllerB, который содержит кнопку «Перейти к A». У кнопки есть переход PUSH для перехода к A.
  • Нам приходится много путешествовать между двумя ViewController'ами.

Как видите, между ViewController A и B существует цикл перехода, и я думаю, что мы никогда не должны допускать этого. Я бы предпочел перейти от B к A с помощью кнопки «Назад» на панели навигации.

Насколько серьезен переходный цикл PUSH в дизайне? Допустимо ли это в некоторых случаях? Где посмотреть рекомендуемый хороший дизайн от Apple (если есть?)

РЕДАКТИРОВАТЬ: Я пытаюсь использовать решение nfarshchi "поп перед отправкой", но оно не работает. Вот как я это сделал: 1) Я не могу создать переход от VC A к VC B и перейти от VC B к VC А в то же время. Кажется, что раскадровка предотвращает это. 2) Таким образом, я создаю один переход с идентификатором «gotoB» от кнопки «Перейти к B» в VC A к VC B и один переход с идентификатором «gotoA» от кнопки «Перейти к A» из VC B в VC A.

Таким образом, раскадровка будет выглядеть так:

VC X ---Push---> VC A ‹----Push----> VC B (Причина, по которой мне нужен ViewController X, объясняется позже) 3) В VC A у меня есть это:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"Prepage for segue go to B") ;
    if ([[segue identifier] isEqualToString:@"gotoB"] ) {
        [self.navigationController popViewControllerAnimated:NO];

    }
}

Мне нужен VC X, потому что я не могу извлечь ViewController из стека, если там есть только один ViewController.

Теперь это кажется правильным, но когда я нажал «Перейти к B», вместо этого он перешел к VC X. Было ясно, что вышеприведенный popViewControllerAnimated: извлек VC A, и все, переход к VC B больше не запускался. В результате VC B не был помещен в стек, как ожидалось.

Таким образом, я считаю невозможным реализовать решение нфарщи.


person grandagile    schedule 26.06.2012    source источник


Ответы (2)


Вы можете сделать это, но учтите, что когда вы выталкиваете UIViewController и снова вставляете его, вы вызываете множество методов для его переделки. если вы хотите много перемещаться по ним, лучше использовать UINavigationController. в этом случае вы делаете их только один раз и можете легко перемещаться между ними. это будет использовать меньше системных ресурсов

person nfarshchi    schedule 26.06.2012
comment
Спасибо. Но я не думаю, что ваше решение о выталкивании перед отправкой сработает. - person grandagile; 26.06.2012
comment
Нет, чувак, я не имел в виду, что ты щелкаешь перед нажатием, я говорил, что с помощью UINavigationController ты нажимаешь UIViewController только один раз, а также у тебя может быть простая кнопка «Назад». и нет необходимости выталкивать его снова. UINavigationController сделает это за вас. - person nfarshchi; 26.06.2012
comment
Предположим, у вас есть ViewControllerA и ViewControllerB. на A у вас может быть кнопка и [self.navigationController pushViewController:viewControllerB анимированные: YES]; - person nfarshchi; 26.06.2012
comment
UINavigationController добавит кнопку Back к NavigationBar, которая снова покажет вам A. и снова, нажав кнопку, вы перейдете к B, вы не сделаете это снова, вы просто снова покажете это. если вы упомянете, что даже метод ViewDidLoad не будет вызываться дважды - person nfarshchi; 26.06.2012
comment
Спасибо я поняла. Таким образом, ваше решение такое же, как у меня, мы используем кнопку «Назад» в панели навигации вместо создания новой кнопки с переходом PUSH к B. - person grandagile; 27.06.2012

Переход push/pop следует использовать только в том случае, если виртуальное 2D-пространство, создаваемое переходом, является реалистичным. Если пользователь увидит 10 push-переходов подряд, ему будет казаться, что он уходит все глубже и глубже в иерархию, и это может привести к путанице и плохой ментальной модели, особенно если на самом деле вы просто перемещаетесь между двумя контроллерами представления.

Использование кнопки «Назад» было бы лучшим решением, или вы можете сделать свой собственный переход, чтобы пользователю было понятнее, что происходит. Возможно, переход на другую сторону также был бы уместным.

person Mike Weller    schedule 26.06.2012