prepareforsegue performsegue perform for create ios swift segue

ios - performsegue - segue swift 4



Hacer Segue programáticamente en Swift (2)

Tengo dos VCs: VC1 y VC2. En VC1, tengo un finish button que programé y una result array que quiero pasar a VC2.

Sé cómo hacer Segue en el Guión gráfico, pero no puedo hacerlo en este momento ya que el finish button se realiza mediante programación.

Si quiero pasar la matriz de resultados usando segue, ¿hay alguna manera de hacer la segue programáticamente? Si esto no es posible, ¿debería presentar VC2 utilizando presentViewController y configurar un delegado para que pase la result array ?


Aún puede crear el segmento en Interface Builder arrastrando desde VC1 a VC2, simplemente arrastre desde / hacia el pequeño círculo amarillo en la parte superior de la VC. Asígnele a este segmento un nombre único en IB, y en su función de finish puede llamar a performSegueWithIdentifier: pasar el nombre de su segmento y eso es todo. En el método prepareForSegue puede averiguar qué segue se está realizando accediendo a segue.identifier , y si es el segmento en cuestión, puede obtener un puntero a segue.destinationViewController y pasar sus datos de esa manera.


Puede hacerlo como se propone en esta respuesta: InstantiateViewControllerWithIdentifier .

Además, le estoy proporcionando el código de la respuesta vinculada reescrita en Swift porque la respuesta en el enlace fue escrita originalmente en Objective-C.

let vc = UIStoryboard(name:"Main", bundle:nil).instantiateViewControllerWithIdentifier("identifier") as! SecondViewController vc.resultsArray = self.resultsArray self.navigationController?.pushViewController(vc, animated:true)

EDITAR:

Como esta respuesta atrae algo de atención, pensé que le proporcionaba otra manera más segura. En la respuesta anterior, la aplicación se bloqueará si el ViewController con "identifier" no es del tipo SecondViewController . En Swift puede evitar este bloqueo mediante el enlace opcional:

guard let vc = UIStoryboard(name:"Main", bundle:nil).instantiateViewControllerWithIdentifier("identifier") as? SecondViewController else { print("Could not instantiate view controller with identifier of type SecondViewController") return } vc.resultsArray = self.resultsArray self.navigationController?.pushViewController(vc, animated:true)

De esta manera, se empuja el ViewController si es de tipo SecondViewController . Si no se puede convertir en SecondViewController , se imprime un mensaje y la aplicación permanece en el ViewController actual.