0

我有一个我不明白的奇怪问题,因此不知道从哪里开始调试。

首先,要求

我有一个 UISplitView。主视图包含一个将不同视图加载到详细视图中的表。对于一个表格单元格,我想要一个全屏加载的网站。因此,我没有隐藏主视图并调整细节视图的大小,而是展示了一个视图控制器。我有这个问题。

编码

以下是我目前拥有的代码 - 大大简化以避免混乱

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

问题

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

谁能指出我正确的方向?

谢谢

4

2 回答 2

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

target 应该设置为 self 而不是 nil

UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(closeSelf)];
于 2012-10-22T16:13:16.623 回答
0

我会推荐,因为页面正在接管整个屏幕,而不是在拆分视图中作为详细视图控制器推送,以将其作为 UIView 添加到屏幕并将其添加到父级,这样您就不必担心整个导航控制器。然后你可以简单地调用[self.view removeFromSuperview];来关闭 webview。

在 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];
}
于 2012-10-22T14:41:07.613 回答