DismissViewController отклоняет два UIViewController
Я представляю точку зрения таким образом:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
ContractDetailsViewController *contractDetailsViewController = [[ContractDetailsViewController alloc] init];
contractDetailsViewController.client = self.client;
contractDetailsViewController.contractId = [NSString stringWithFormat:@"%d", indexPath.row];
[self presentViewController:[[UINavigationController alloc]initWithRootViewController:contractDetailsViewController] animated:YES completion:^{
}];
}
После того, как представление появляется, я отклоняю это с:
- (void)close
{
[self dismissViewControllerAnimated:YES completion:^{}];
}
Ошибка в том, что вид исчезает, вид, который был за ним, также исчезает сразу после.
2 ответа
Это может объяснить, что происходит с вашими контроллерами представления:
Если вы представляете несколько контроллеров представления подряд, тем самым создавая стек представленных контроллеров представления, вызов этого метода для контроллера представления, расположенного ниже в стеке, отклоняет его непосредственный дочерний контроллер представления и все контроллеры представления выше этого дочернего элемента в стеке. Когда это происходит, только самый верхний вид отклоняется в анимационном режиме; любые промежуточные контроллеры представления просто удаляются из стека. Самое верхнее представление отклоняется, используя его модальный стиль перехода, который может отличаться от стилей, используемых другими контроллерами представления ниже в стеке.
( источник)
Это означает, что если вы представляете контроллер представления A, затем просматриваете контроллер B, а затем вызываете dismiss на контроллере представления B, оба контроллера представления отклоняются (хотя только B с анимацией).
Если вы хотите управлять двумя различными иерархиями контроллеров представления, вы можете использовать второй контроллер навигации. Это означает, например, что вы должны представить новый контроллер навигации вместо контроллера представления A и сделать контроллер представления A корневым контроллером навигации. Затем вы можете нажать / вытолкнуть любой другой требуемый контроллер вида (B и т. Д.)
Согласно яблочной документации.
Если вы представляете несколько контроллеров представления подряд и таким образом строите стек представленных контроллеров представления, вызов этого метода для контроллера представления, расположенного ниже в стеке, отменяет его непосредственный дочерний контроллер представления и все контроллеры представления выше этого дочернего элемента в стеке. Когда это происходит, только самый верхний вид отклоняется в анимационном режиме; любые промежуточные контроллеры представления просто удаляются из стека. Самое верхнее представление отклоняется, используя его модальный стиль перехода, который может отличаться от стилей, используемых другими контроллерами представления ниже в стеке.
Если вы хотите добиться этой функциональности, просто добавьте UIViews
в текущем виде и показать их модальным способом. Вы можете удалить их по одному.