2012-10-22 152 views
0

我有一個奇怪的問題,我不明白,因此不知道從哪裏開始調試。後退按鈕不起作用的導航控制器

首先,要求

我有一個UISplitView。主視圖包含一個表格,將不同的視圖加載到Detail視圖中。對於一個表格單元格,我想要一個網站加載全屏。因此,我不是隱藏主視圖並調整「詳細信息」視圖的大小,而是呈現視圖控制器。正因爲如此,我有這個問題。

THE CODE

下面是代碼我現在有 - 大大剝離下來以避免混亂

-- MASTER VIEW -- 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ProjectWebViewController *detailView=[[ProjectWebViewController alloc] init]; 
    UIViewController *localdetailViewController = detailView; 

    UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:localdetailViewController]; 
    [self presentViewController:navController animated:YES completion:nil]; 
} 

然後我在所呈現的視圖控制器下面

-- PRESENTED VIEW CONTROLLER -- 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIWebView * webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)]; 

    NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [webView loadRequest:request]; 

    [[self view] addSubview:webView]; 

    UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:nil action:@selector(closeSelf)]; 
    [[self navigationItem] setLeftBarButtonItem:backBtn]; 
} 

-(void)closeSelf 
{ 
    [[self navigationController] dismissViewControllerAnimated:YES completion:nil]; 
} 

技術問題

上述工作很好,只有一個例外。點擊後,我添加到導航欄的後退按鈕不會執行任何操作。但是,如果我單擊加載的網頁上的任何空白區域,後退按鈕的作品。我已經測試了很多次。即使我單擊某個空白區域然後單擊網頁上的鏈接,後退按鈕也會停止工作,直到在當前網頁上單擊更多的空白區域。

任何人都可以指向正確的方向嗎?

感謝

回答

1
UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:nil action:@selector(closeSelf)]; 

目標應設置爲自我而不是零

UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(closeSelf)]; 
+0

D'哦!我怎麼錯過了。現在感覺有點愚蠢。謝謝。 – Typhoon101

+0

它發生我們都這樣做。 –

0

我建議,因爲頁接管整個屏幕,而不是被推作爲拆分視圖的詳細視圖控制器將其添加到屏幕作爲一個UIView並添加到父,所以你不需要擔心整個導航控制器。然後,您可以簡單地撥打[self.view removeFromSuperview];關閉網頁瀏覽。

內部的didSelectRowForIndexPath調用createModalWebView爲您的行選擇;以下是一些未經測試的代碼,應根據您提供的代碼進行工作。

- (void)createModalWebView{ 
     UIWebView * webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)]; 

     NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; 
     NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
     [webView loadRequest:request]; 

     //YOUR MASTERVIEW 
     [[self view] addSubview:webView]; 

     UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:nil action:@selector(closeSelf)]; 
     [[self navigationItem] setLeftBarButtonItem:backBtn]; 
    } 

-(void)closeSelf 
{ 
    //REMOVE THE WEBVIEW FROM SCREEN 
    [[self view] removeFromSuperview]; 
} 
相關問題