pushViewController no funciona con TabbarController

Tengo una aplicación de controller de barra de tabs que usa storyboard. Cada pestaña tiene una UIWebview. Quiero capturar un enlace cuando el usuario click el enlace en la Vista Web si el enlace es un enlace externo (si no es mi sitio), quiero abrir el enlace en un UIViewControl diferente. (como una aplicación de Twitter de popupi para iPhone)

Ahora mismo; Recibí este código para capturar el enlace (si el enlace es bing.com, entonces debería abrirlo otro controller de vista) pero no puedo abrir otro UIViewController (en este caso PopViewController). Me da este error:

No visible @interface para 'GundemViewController' declara el selector 'pushViewController: animated:'

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { //CAPTURE USER LINK-CLICK. NSURL *url = [request URL]; NSString *urlString = [url absoluteString]; /****** UIWebViewNavigationTypeLinkClicked: When user click on a link in the app it senses the action */ if (navigationType == UIWebViewNavigationTypeLinkClicked) { if ([urlString hasPrefix:@"http://www.bing.com/"]) { PopViewController *popUpView = [[PopViewController alloc] initWithNibName:@"PopupViewController" bundle:nil]; [self pushViewController:popUpView animated:YES]; return NO; } } return YES; } 

Puede incrustar controlleres de navigation en cada pestaña, para que en lugar de:

 UITabBarController Tab1 View Controller Tab2 View Controller Tab3 View Controller 

tienes

 UITabBarController Tab1 Navigation Controller Tab1 View Controller Tab2 Navigation Controller Tab2 View Controller Tab3 Navigation Controller Tab3 View Controller 

y así. Solo puede llamar a -pushViewController:animated: en una instancia de un controller de navigation.

En su delegado de la aplicación, probablemente inicialice cada uno de sus controlleres de vista, los coloque en una matriz y luego asigne esa matriz al controller de la barra de tabs. Para agregar controlleres de navigation, tiene un paso adicional:

 UIViewController *tab1Controller = [[MyViewController alloc] initWithNibNamed:@"MyViewController" bundle:nil]; UINavigationController *tab1Nav = [[UINavigationController alloc] initWithRootViewController:tab1Controller]; // etc 

Luego configure la matriz de controlleres de vista para su controller de barra de tabs a los controlleres de navigation que haya creado.

En sus controlleres de vista, en lugar de llamar a -pushViewController:animated: on self , lo llamará en self.navigationController .

editar:

Si no desea un controller de navigation, puede usar

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

para presentar el pop-up. En el pop-up, cuando el usuario toca el button de cerrar, use

 [self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

para descartarlo

¿Qué es GundemViewController ? Busque en qué se está devolviendo el self.navigationController lugar de UINavigationController . Una forma de hacerlo es establecer un punto de interrupción justo antes de empujar el controller de vista y luego entrar en la llamada self.navigationController .