Iphone pushViewController不能与TabbarController一起使用

Iphone pushViewController不能与TabbarController一起使用,iphone,ios,pushviewcontroller,Iphone,Ios,Pushviewcontroller,我有一个选项卡栏控制器应用程序,它使用故事板。每个选项卡都有一个UIWebview。我想在用户单击Webview上的链接时捕获链接如果该链接是外部链接(如果不是我的站点),我想在其他UIViewControl中打开该链接。(就像popupi Twitter iphone应用程序那样) 现在,;我得到了捕获链接的代码(如果链接是bing.com,那么它应该打开另一个视图控制器),但我无法打开另一个UIViewController(在本例中为PopViewController)。它给了我这个错误:

我有一个选项卡栏控制器应用程序,它使用故事板。每个选项卡都有一个UIWebview。我想在用户单击Webview上的链接时捕获链接如果该链接是外部链接(如果不是我的站点),我想在其他UIViewControl中打开该链接。(就像popupi Twitter iphone应用程序那样)

现在,;我得到了捕获链接的代码(如果链接是bing.com,那么它应该打开另一个视图控制器),但我无法打开另一个UIViewController(在本例中为PopViewController)。它给了我这个错误:

“GundemViewController”没有可见的@界面声明选择器“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;
}

什么是
GundemViewController
?查看从
self.navigationController
而不是
UINavigationController
返回的原因。一种方法是在按下视图控制器之前设置一个断点,然后进入
self.navigationController
调用。

您可以在每个选项卡中嵌入导航控制器,以代替:

UITabBarController
    Tab1 View Controller
    Tab2 View Controller
    Tab3 View Controller
你有

UITabBarController
    Tab1 Navigation Controller
        Tab1 View Controller
    Tab2 Navigation Controller
        Tab2 View Controller
    Tab3 Navigation Controller
        Tab3 View Controller
等等。只能在导航控制器的实例上调用
-pushViewController:animated:

在应用程序委托中,您可能会初始化每个视图控制器,将它们放入一个数组中,然后将该数组分配给选项卡栏控制器。要添加导航控制器,您还有一个额外的步骤:

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

// etc
然后将选项卡栏控制器的视图控制器阵列设置为已创建的导航控制器

在视图控制器中,不要在
self
上调用
-pushViewController:animated:
,而是在
self.navigationController
上调用它

编辑:

如果不需要导航控制器,可以使用

[self presentViewController:popUpView 
                   animated:YES 
                 completion:nil];
显示弹出窗口。在弹出窗口中,当用户触摸关闭按钮时,使用

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

关闭它。

GundemViewController是一个UIViewController。请你再检查一下那个部分好吗。我编辑了那个部分。你不能在任何旧的视图控制器上调用
-pushViewController:animated:
。您需要在
UINavigationController
上调用它。最简单的方法是调用
self.navigationController
,它将返回视图控制器当前所在的导航控制器。但是当我执行self.navigationController时,什么都没有发生?这就是我试图解决的问题。我错过什么了吗?方法还是什么?这个视图控制器在导航控制器内吗?如果没有发生任何事情,
self.navigationController
很可能返回nil。在情节提要中,编辑器>嵌入>导航控制器。有趣。。。它不起作用。我只想创建一个弹出窗口(如俯视图控制器,当用户单击关闭按钮时,我需要关闭视图并返回到我的网站)如Twitter应用程序,如果您单击外部链接,它们会在不同的视图中导航您。基本上我只需将Tabbarcontroller拖放到舞台(故事板)中即可然后我尝试创建一个弹出窗口(与所有当前选项卡和其他内容分离),我只想创建一个俯视图控制器,当用户单击关闭按钮时。我需要反驳Seamus我知道任何想法都会得到赞赏***WebKit在webView中丢弃了一个未捕获的异常:decidePolicyForNavigationAction:request:frame:decisionListener:delegate:无法在bundle中加载NIB:名为“PopupViewController”的“NSBundle(loaded)”看起来您正在尝试加载一个名为“PopuVIEW控制器”,但它不存在。也许它应该是“PopViewController”,因为这是类名。愚蠢的我!我得到了两次检查,但通过了最简单的事情:)我很感激你的帮助和时间。谢谢。如果有帮助的话,请考虑接受答案。很高兴能帮助你!