отклонить modalviewcontroller из другого modalviewcontroller - PullRequest
3 голосов
/ 09 мая 2011

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

[self.view.superview dismissmodalviewcontroller];  

но это показывает ошибку. Как правильно получить ссылку на первый modalViewController из второго и вызвать из него метод dismiss?

Ответы [ 6 ]

10 голосов
/ 09 мая 2011

Это так.

A представляет B. Здесь, A является родителем B (Здесь A.modalViewController будет B, а B.parentViewController будет A)

И B представляет C. Здесь B является родителем C (Здесь B.modalViewController будет C, а C.parentViewController будет B)

В соответствии с руководящими принципами Apple, родительский контроллер обязан уволить дочерний контроллер.

Поэтому, если вы хотите закрыть контроллер C, вы вызываете dismissModalViewController в C.parentViewController. Так как родитель C является B, таким образом B отклоняет свой модальный (дочерний) контроллер, который он представил.

Но вы даже хотите уволить B. Ответственность родителей B за увольнение B. Так что вам нужно сказать [B.parentViewController dismissModalViewControllerAnimated: YES];

Таким образом, вам нужно получить B из C как C.parentViewController (не забудьте здесь выполнить приведение). Затем вы говорите, что [B.parentViewController dismissModalViewControllerAnimated: YES];

2 голосов
/ 27 августа 2011

Чтобы уточнить еще, вам, вероятно, понадобится что-то вроде этого:

[self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES];
2 голосов
/ 09 мая 2011

Метод dismissModalViewControllerAnimated: является частью класса UIViewController, а не UIView.Таким образом, вам нужно сделать

[self.parentViewController dismissModalViewControllerAnimated:YES];

вместо вызова self.view.superview.

2 голосов
/ 09 мая 2011

Попробуйте [self.parentViewController dismissModalViewControllerAnimated:YES];

Это отклонит оба контроллера модального вида

1 голос
/ 17 марта 2014

Я только что нашел ответ, может быть, он кому-нибудь поможет нам нужна только одна строка кода

[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES];
0 голосов
/ 27 февраля 2018

К сожалению, вид всегда перемещается к первому модалу в стеке, а затем выполняет анимацию.

Я исправил это с помощью пользовательской анимации:

        let transition: CATransition = CATransition()
        transition.duration = 0.5
        transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        transition.type = kCATransitionReveal
        transition.subtype = kCATransitionFromBottom
        self.view.window!.layer.add(transition, forKey: nil)
        self.presentingViewController?.presentingViewController?.dismiss(animated: false, completion: nil)
...