2013-04-06 22 views
5

我有一個使用故事板的Tab Bar Controller應用程序。每個選項卡都有一個UIWebview。如果鏈接是外部鏈接(如果它不是我的網站),我想在用戶單擊Webview上的鏈接時捕獲鏈接我想在不同的UIViewControl中打開鏈接。 (像一個popupi Twitter的iphone應用程序那樣做)pushViewController不適用於TabbarController

現在;我有這個代碼捕獲鏈接(如果鏈接是bing.com,那麼它應該打開它另一個視圖控制器),但我無法打開另一個UIViewController(在這種情況下PopViewController)。它給我這個錯誤:

爲 'GundemViewController' 不可見@interface聲明選擇 'pushViewController:動畫:'

- (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; 
} 

回答

10

您可以嵌入導航控制器的每個選項卡,這樣,而不是:

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]; 

解除它。

+0

基本上我只是拖放一個Tabbarcontroller到階段(storyboard)比我試圖達到創建一個彈出(從所有當前標籤和其他東西分開)我只是想創建一個頂部視圖控制器,當用戶單擊關閉按鈕。我需要解僱 – 2013-04-06 15:30:49

+0

請參閱上面的編輯。 – 2013-04-06 15:34:44

+0

Seamus我得到了任何想法將不勝感激*** WebKit放棄了webView中未捕獲的異常:decidePolicyForNavigationAction:request:frame:decisionListener:delegate:無法在bundle中加載NIB:'NSBundle(loaded)'名稱爲'PopupViewController' – 2013-04-06 15:48:17

1

什麼是GundemViewController?看看爲什麼從self.navigationController而不是UINavigationController返回。一種方法是在推視圖控制器之前設置一個斷點,然後進入self.navigationController呼叫。

+0

GundemViewController是一個UIViewController。你能否再次檢查那部分。我編輯了這部分。 – 2013-04-06 15:14:02

+0

你不能在任何舊的視圖控制器上調用'-pushViewController:animated:'。你需要在'UINavigationController'上調用它。最簡單的方法是調用'self.navigationController',它將返回視圖控制器當前所在的導航控制器。 – 2013-04-06 15:16:49

+0

但是當我這樣做self.navigationController時,什麼都不會發生?這是我正在嘗試解決的問題。我想念什麼?一個方法什麼的? – 2013-04-06 15:23:54