Навигационный контроллер Push / Pop приводит к накоплению нескольких анимаций - PullRequest
0 голосов
/ 04 мая 2020

У меня есть последовательность шагов, которые пользователь должен выполнить, чтобы зарегистрироваться в моем приложении. Все это часть UINavigationController. Когда пользователь переходит с шага 1 на шаг 2, выполняется pu sh segue для загрузки второго UIViewController. У меня есть пользовательские NavItem s на обеих страницах, чтобы пользователь мог go перемещаться вперед и назад по стеку по своему усмотрению.

enter image description here

в первый раз пользователь нажимает кнопку Step 2, все хорошо. Затем они нажимают кнопку Step 1 на втором контроллере вида, они go возвращаются к первому v c, как и следовало ожидать.

Но вот где это становится странным: если они затем снова нажмите кнопку Step 2, она перейдет ко второму контроллеру вида, но она оживляет дважды . Я много читал о том, как это может произойти, если переход связан с кнопкой, но в моем случае переход связан с контроллером представления (как вы можете видеть на скриншоте. Далее, если пользователь нажимает Step 1, он анимирует назад дважды . И если они снова go через эту последовательность туда-сюда снова, анимации происходят три раза (и так далее).

Кажется, может быть, он каждый раз создает новый контроллер представления и добавляет его в стек, фактически не вставляя более раннюю версию. Это код, в котором я пытаюсь вставить стек v c во второй контроллер представления (извините, старый код obj c). Я сделал несколько разных попыток, но ни одна из них не решила проблему с несколькими анимациями:

- (IBAction)back:(UIBarButtonItem *)sender {
    NSArray *controllers = self.navigationController.viewControllers;
    int previous = (int)controllers.count - 2;
    UIViewController *previousController = [controllers objectAtIndex:previous];
    [self.navigationController popToViewController:previousController animated:YES];
}

Если это помогает, в первом контроллере представления кнопка инициирует метод, который проверяет вводимые пользователем данные. Если данные проверены, он просто выполняет следующую строку:

[self performSegueWithIdentifier:@"regUserDataSegue" sender:self];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...