отключить modalviewcontroller от другого modalviewcontroller

#iphone #modalviewcontroller

#iPhone #modalviewcontroller

Вопрос:

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

 [self.view.superview dismissmodalviewcontroller];  
  

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

Комментарии:

1. После того, как я уже задал 25 вопросов, я думаю, вам следует научиться правильно форматировать в StackOverflow. Если вы форматируете свой вопрос так, чтобы его было легче читать, люди более склонны читать и отвечать на него.

2. когда вы пишете вопрос, выделите всю часть кода с помощью мыши и нажмите кнопку ‘{}’ вверху.. Это способ форматирования кодов..

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

Ответ №1:

Это похоже на это.

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 отклоняет modalviewcontrolleranimated: ДА];

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

Ответ №2:

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

Это приведет к отключению обоих контроллеров модального представления

Комментарии:

1. я пробовал это таким образом. но, похоже, это не работает.это иерархия представлений.tableviewcontroller-> modalviewcontroller-> modalviewcontroller

Ответ №3:

Метод dismissModalViewControllerAnimated: является частью UIViewController класса, а не of UIView . Итак, вам нужно сделать

 [self.parentViewController dismissModalViewControllerAnimated:YES];
  

вместо того, чтобы вызывать его self.view.superview .

Комментарии:

1. это не работает пытался сделать так, но отклоняется только одно представление. первый modalview не going.is есть какой-либо другой способ сделать это?

2. @sujith1406: Так что у вас [self dismissModelViewControllerAnimated:YES]; уже должен быть. Попробуйте заменить его на [self.parentViewController dismissModalViewControllerAnimated:YES]; вместо этого. Из связанной документации: Если вы представляете несколько контроллеров модального представления последовательно и, таким образом, создаете стек контроллеров модального представления, вызов этого метода на контроллере представления, расположенном ниже в стеке, отключает его непосредственный дочерний контроллер представления и все контроллеры представления, расположенные выше этого дочернего элемента в стеке. .

3. извините, что снова беспокою вас, когда я получил ваш ответ, я сначала заменил [self dismissModelViewControllerAnimated: YES]; на [self.parentViewController dismissModelViewControllerAnimated: YES]; но в обоих случаях отклоняется только второй modalview.

Ответ №4:

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

 [self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES];
  

Ответ №5:

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

 [self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES];
  

Ответ №6:

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

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

         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)