6

我有一个使用情节提要的标签栏控制器应用程序。每个选项卡都有一个 UIWebview。如果链接是外部链接(如果它不是我的网站),我想在用户单击 Webview 上的链接时捕获链接我想在不同的 UIViewControl 中打开链接。(就像 popupi Twitter iphone 应用程序那样)

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

'GundemViewController' 没有可见的@interface 声明选择器'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;
}
4

2 回答 2

11

您可以在每个选项卡中嵌入导航控制器,而不是:

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

然后将标签栏控制器的视图控制器数组设置为您创建的导航控制器。

在您的视图控制器中,您将调用它而不是调用-pushViewController:animated:on 。selfself.navigationController

编辑:

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

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

呈现弹出窗口。在弹出窗口中,当用户触摸关闭按钮时,使用

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

解雇它。

于 2013-04-06T15:24:03.290 回答
1

是什么GundemViewController?看看为什么从而不是self.navigationController返回UINavigationController。一种方法是在推送视图控制器之前设置断点,然后进入self.navigationController调用。

于 2013-04-06T15:07:59.440 回答