iOS: present view controller programmaticallly

Estoy usando el presentViewController:animated:completion: método para ir a otro controller de vista.

Este es mi código:

 AddTaskViewController *add = [[AddTaskViewController alloc] init]; [self presentViewController:add animated:YES completion:nil]; 

Este código va al otro UIViewController pero el otro controller está vacío. Siempre he estado usando storyboards pero ahora necesito que esto se haga en código.

Si está utilizando un storyboard, probablemente no debería usar alloc e init para crear un nuevo controller de vista. En cambio, mire su guión gráfico y encuentre el segue que desea realizar; debería tener un identificador único (y si no, puede configurar uno en la barra lateral derecha).

Una vez que haya encontrado el identificador para esa segue, envíe el controller de vista actual a -performSegueWithIdentifier:sender post del -performSegueWithIdentifier:sender :

 [self performSegueWithIdentifier:@"mySegueIdentifier" sender:self]; 

Esto hará que el guión gráfico instancie un AddTaskViewController y lo presente de la manera que ha definido para ese segue.


Si, por otro lado, no está utilizando un storyboard en absoluto, debe proporcionar a AddTaskViewController algún tipo de interfaz de usuario. La forma más común de hacerlo es inicializar el controller con una punta: en lugar de simplemente llamar a init , llamará a -initWithNibName:bundle: y proporcionará el nombre de un file .xib que contiene su UI de tarea adicional:

 AddTaskViewController *add = [[AddTaskViewController alloc] initWithNibName:@"AddTaskView" bundle:nil]; [self presentViewController:add animated:YES completion:nil]; 

(Hay otras forms (less comunes) de get una vista asociada con su nuevo controller de vista, pero probablemente esto le presente los menores problemas para ponerse en funcionamiento).

Si está utilizando Storyboard y su "add" viewController está en storyboard, establezca un identificador para su "add" viewcontroller en la configuration para que pueda hacer algo como esto:

 UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"NameOfYourStoryBoard" bundle:nil]; AddTaskViewController *add = [storyboard instantiateViewControllerWithIdentifier:@"viewControllerIdentifier"]; [self presentViewController:add animated:YES completion:nil]; 

si no tiene su "add" viewController en storyboard o un file nib y quiere crear todo el progtwig programáticamente, entonces appDocs dice:

Si no puede definir sus vistas en un guión gráfico o en un file nib, anule el método loadView para crear manualmente una jerarquía de vistas y asignarla a la propiedad de vista.

tu codigo :

  AddTaskViewController *add = [[AddTaskViewController alloc] init]; [self presentViewController:add animated:YES completion:nil]; 

este código puede ir al otro controller, pero obtienes un nuevo viewController, no el controller de tu storyboard, puedes hacer así:

 AddTaskViewController *add = [self.storyboard instantiateViewControllerWithIdentifier:@"YourStoryboardID"]; [self presentViewController:add animated:YES completion:nil]; 

Prueba lo siguiente:

 NextViewController *nextView = [self.storyboard instantiateViewControllerWithIdentifier:@"nextView"]; [self presentViewController:nextView animated:YES completion:NULL]; 

Prueba este código:

 [self.navigationController presentViewController:controller animated:YES completion:nil]; 

La mejor manera es

 AddTaskViewController * add = [self.storyboard instantiateViewControllerWithIdentifier:@"addID"]; [self presentViewController:add animated:YES completion:nil]; 

Así es como puedes hacerlo en Swift:

 let vc = UIViewController() self.presentViewController(vc, animated: true, completion: nil) 
 LandingScreenViewController *nextView=[self.storyboard instantiateViewControllerWithIdentifier:@"nextView"]; [self presentViewController:nextView animated:YES completion:^{}];