后退按钮不在导航控制器上工作

时间:2012-10-22 14:16:01

标签: objective-c dismiss navigationitem

我遇到了一个我不理解的奇怪问题,因此不知道从哪里开始调试。

首先,要求

我有一个UISplitView。主视图包含一个表,可以在Detail视图中加载不同的视图。对于一个表格单元格,我想要一个全屏加载的网站。因此,我提出了一个视图控制器,而不是隐藏主视图和调整详细信息视图的大小。正是由于这个问题,我才有了问题。

代码

以下是我目前的代码 - 大大减少以避免混乱

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

问题

上述情况很好,只有一个例外。添加到导航栏的后退按钮在单击时不执行任何操作。但是,如果我单击加载的网页上的任何空白区域,后退按钮将起作用。我已经多次测试过了。即使我单击一些空白区域然后单击网页上的链接,后退按钮也会再次停止工作,直到在当前网页上单击更多空白区域。

有人能指出我正确的方向吗?

由于

2 个答案:

答案 0 :(得分:1)

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

目标应设置为self而不是nil

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

答案 1 :(得分: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];
}