ios objective-c uiviewcontroller uistoryboard presentviewcontroller

ios - ¿Cómo llamar a un controlador de vista programáticamente?



objective-c uiviewcontroller (8)

He mirado todos los tutoriales que puedo encontrar en este y todavía no tengo la respuesta. Necesito llamar a otra vista desde el código. Estoy usando UIStoryboards . He cambiado la vista muchas veces arrastrando los UIButtons desde UIButtons , pero ahora debe ser desde el código. Estoy intentando llamar a la página de información desde el menú principal si es la primera vez que el usuario abre la aplicación. Sin embargo, parece que no puedo encontrar una manera de cambiar las vistas desde el código. Todas mis vistas están controladas por los mismos archivos ( ViewController2 ). El identifier de mi menú principal es ViewControllerMain , y el identifier de la página de información es ViewControllerInfo . Primero intenté esto:

[ViewControllerMain presentViewController: ViewControllerInfo animated:YES completion: NULL];

Luego intenté hacer diferentes UIViewControllers para cada uno y decir:

[ViewController2 presentViewController: ViewController animated:YES completion: NULL];

Tampoco funcionó. Para el primero, dice:

Uso del identificador no declarado ViewControllerMain.

En el segundo, dice:

Nombre de interfaz inesperado ''ViewController'': identificador esperado.

¿Que puedo hacer?


Rápido

Esto obtiene un controlador de vista desde el guión gráfico y lo presenta.

let storyboard = UIStoryboard(name: "Main", bundle: nil) let secondViewController = storyboard.instantiateViewController(withIdentifier: "secondViewControllerId") as! SecondViewController self.present(secondViewController, animated: true, completion: nil)

Cambie el nombre del guión gráfico, vea el nombre del controlador y vea el ID del controlador según corresponda.


Debe crear una instancia del controlador de vista desde el guión gráfico y luego mostrarlo:

ViewControllerInfo* infoController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerInfo"]; [self.navigationController pushViewController:infoController animated:YES];

Este ejemplo asume que tiene un controlador de navegación para volver a la vista anterior. Por supuesto, también puede utilizar presentViewController: animated: completed :. El punto principal es que su guión gráfico ejemplifique su controlador de vista de destino utilizando la ID del controlador de vista de destino.



Importe la clase de controlador de vista que desea mostrar y use el siguiente código

KartViewController *viewKart = [[KartViewController alloc]initWithNibName:@"KartViewController" bundle:nil]; [self presentViewController:viewKart animated:YES completion:nil];


Para crear un controlador de vista:

UIViewController * vc = [[UIViewController alloc] init];

Para llamar a un controlador de vista (debe llamarse desde otro controlador de vista):

[self presentViewController:vc animated:YES completion:nil];

Para uno, use nil en lugar de nulo.

Cargando un controlador de vista desde el guión gráfico:

NSString * storyboardName = @"MainStoryboard"; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil]; UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"IDENTIFIER_OF_YOUR_VIEWCONTROLLER"]; [self presentViewController:vc animated:YES completion:nil];

Identifier de su controlador de vista es igual al nombre de clase de su controlador de vista o una identificación de guión gráfico que puede asignar en el inspector de identidad de su guión gráfico.


Puede llamar a ViewController de esta manera, si lo desea con NavigationController

1. En pantalla actual: cargar nueva pantalla

VerifyExpViewController *addProjectViewController = [[VerifyExpViewController alloc] init]; [self.navigationController pushViewController:addProjectViewController animated:YES];

2.1 En la vista cargada: agregue abajo en el archivo .h

@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate>

2.2 En la vista cargada: agregue a continuación en el archivo .m

@implementation VerifyExpViewController - (void)viewDidLoad { [super viewDidLoad]; self.navigationController.delegate = self; [self setNavigationBar]; } -(void)setNavigationBar { self.navigationController.navigationBar.backgroundColor = [UIColor clearColor]; self.navigationController.navigationBar.translucent = YES; [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"B_topbar.png"] forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]}; self.navigationItem.hidesBackButton = YES; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Btn_topback.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onBackButtonTap:)]; self.navigationItem.leftBarButtonItem.tintColor = [UIColor lightGrayColor]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Save.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onSaveButtonTap:)]; self.navigationItem.rightBarButtonItem.tintColor = [UIColor lightGrayColor]; } -(void)onBackButtonTap:(id)sender { [self.navigationController popViewControllerAnimated:YES]; } -(IBAction)onSaveButtonTap:(id)sender { //todo for save button } @end

Espero que esto sea útil para alguien allí :)


la lógica principal detrás de esto es_,

NSString * storyboardIdentifier = @"SecondStoryBoard"; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardIdentifier bundle: nil]; UIViewController * UIVC = [storyboard instantiateViewControllerWithIdentifier:@"YourviewControllerIdentifer"]; [self presentViewController:UIVC animated:YES completion:nil];


UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_iOS7" bundle:nil]; AccountViewController * controller = [storyboard instantiateViewControllerWithIdentifier:@"accountView"]; // [self presentViewController:controller animated:YES completion:nil]; UIViewController *topRootViewController = [UIApplication sharedApplication].keyWindow.rootViewController; while (topRootViewController.presentedViewController) { topRootViewController = topRootViewController.presentedViewController; } [topRootViewController presentViewController:controller animated:YES completion:nil];