¿Hay alguna forma de obtener el nombre de clase del VC padre en el presente (hijo) UIViewController? Mi VC 'hijo' (push) tiene dos 'padres' UIViewController, así que me gustaría saber cuál es el padre actual.

20
Marko 28 ene. 2015 a las 20:30

6 respuestas

La mejor respuesta

Este es un enfoque:

if let parentVC = self.parentViewController {
    if let parentVC = parentVC as? someViewController {
        // parentVC is someViewController
    } else if let parentVC = parentVC as? anotherViewController {
        // parentVC is anotherViewController
    }
}

Primero, asigne y, opcionalmente, desenvuelva self.parentViewController.

En segundo lugar, use la transmisión opcional as? y asigne el controlador de vista a parentVC si funciona.

Dicho esto, esto es un olor a código: los controladores de vista infantil normalmente no deberían tener idea de quiénes son sus controladores de vista principal. Cualquiera que sea el problema que esté resolviendo, probablemente debería resolverlo con decir, no preguntar y delegar en su lugar.

28
Aaron Brager 28 ene. 2015 a las 18:00

Primero agregue extensión en el controlador de vista

extension UIView {
    var parentViewController: UIViewController? {
        var parentResponder: UIResponder? = self
        while parentResponder != nil {
            parentResponder = parentResponder!.next
            if let viewController = parentResponder as? UIViewController {
                return viewController
            }
        }
        return nil
    }
}

Ahora úsalo así

let vc = self.parentViewController

O

if let parentVC = self.parentViewController {
    if let parentVC = parentVC as? someViewController {
        // parentVC is someViewController
    } else if let parentVC = parentVC as? anotherViewController {
        // parentVC is anotherViewController
    }
}
3
EstevaoLuis 31 oct. 2018 a las 11:45

Agregue esta extensión y busque la vista principal por su tipo.

extension UIResponder {
    
    func next<T: UIResponder>(_ type: T.Type) -> T? {
        return next as? T ?? next?.next(type)
    }
    
}

Cómo utilizar

self.next(UIViewController.self)
0
Alizain Prasla 18 dic. 2020 a las 18:29

Intente elegir el niño de la matriz de niños de la siguiente manera

if let parentVC = self.parent {

            if let parentVC = parentVC.children[0] as? someViewController {}}
0
Yosra Nagati 4 sep. 2019 a las 02:51

Actualizado a Swift 4

Swift 4:

if let parentVC = self.parent {
    if parentVC is someViewControllerr {
        // parentVC is someViewController
    } else if parentVC is anotherViewController {
        // parentVC is anotherViewController
    }
}

Rápida 3:

if let parentVC = self.parentViewController {
    if let parentVC = parentVC as? someViewController {
        // parentVC is someViewController
    } else if let parentVC = parentVC as? anotherViewController {
        // parentVC is anotherViewController
    }
}
0
Marvin Ruciński 7 jul. 2018 a las 18:48

Simplemente use view.parentViewController y eventualmente su propiedad title.

1
qwerty_so 28 ene. 2015 a las 17:50