2016-11-09 2 views
2

Мне интересно, как я смогу удалить контроллер представления, к которому приложение в настоящее время не включено?Удалить контроллер просмотра из другого UIViewController Swift iOS

Предположим, что я перешел из OldViewController в NewViewController. Как только NewVC загружается, как я могу его удалить, OldVC, пока приложение все еще находится в NewVC?

+0

И какой контроллер вы хотите отображать вместо OldViewController? – alexburtnik

+0

A -> B (представленный над A) -> C (представлен по модулю над B), и вы хотите вернуться с C на A, правильно? – alexburtnik

+0

Я только что отредактировал сообщение, чтобы дать представление о иерархии viewcontroller. – EvanOgo

ответ

1

Я пробовал решения unwind segues и dismiss nested presentingViewController, но у обоих все еще есть проблема, когда промежуточный контроллер виден во время анимации.

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

Возможно, это не лучшее решение, но все же может быть полезно.

расширения Helper:

extension UIViewController { 
    func dismissModalStack(animated: Bool, completion: (()->Void)?) { 
     guard let snapshot = UIApplication.shared.delegate?.window??.snapshotView() else { return } 
     self.presentedViewController?.view.insertSubview(snapshot, at: Int.max) 
     self.dismiss(animated: true, completion: completion) 
    } 
} 

extension UIView { 
    public func snapshotImage() -> UIImage? { 
     UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0) 
     drawHierarchy(in: bounds, afterScreenUpdates: false) 
     let snapshotImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return snapshotImage 
    } 

    public func snapshotView() -> UIView? { 
     guard let snapshotImage = snapshotImage() else { return nil } 
     return UIImageView(image: snapshotImage) 
    } 
} 

Использование:

В последнем представленном контроллере представления:

@IBAction func dismissPressed() { 
    self.presentingViewController?.presentingViewController?.dismissModalStack(animated: true, completion: nil) 
} 

Результат:

enter image description here

Смежные вопросы