0

我有一个非故事板应用程序,它有一个带有一堆单元格的 UITableView,在单击一个单元格时,我推送一个带有 UIWebView 的视图控制器,本地 html 文件根据被点击的单元格加载。

如果此 UIWebView 中还有其他链接,我将使用 UIWebView 委托方法 shouldStartLoadWithRequest 以及此代码:

if(navigationType == UIWebViewNavigationTypeLinkClicked) {
        //When a html link is clicked in uiwebview
        NSURL *url = request.URL;
        NSString *urlString = url.absoluteString;

        //Get components of url
        NSArray *urlComponents = [urlString componentsSeparatedByString:@"/"];
        //Get last component which should be wanted file name
        NSString *wantedLink = [urlComponents objectAtIndex:[urlComponents count]-1];

        //Get the url without the dot
        NSArray *fileComponents = [wantedLink componentsSeparatedByString:@"."];
        NSString *wantedFile = [fileComponents objectAtIndex:0];

        ALSDetailViewController *superDetail = [[ALSDetailViewController alloc] initWithNibName:@"ALSProtocolDetailViewController" bundle:nil];
        self.alsProtocolDetailViewController = superDetail;

        //Check for each wanted file name to see if it matches another file
        if ([wantedLink isEqualToString:@"VTachPulseStable.html"]) {
            //Open different protocol xib with html file name as parameter, and push the view in
            self.alsProtocolDetailViewController.title = @"Ventricular Tachycardia With Pulse";

            self.alsProtocolDetailViewController.protocolURL = wantedFile;
            self.alsProtocolDetailViewController.protocolSubTitle = @"Stable Without Decompensation";

            [self.navigationController pushViewController:self.alsProtocolDetailViewController animated:YES];

            return NO;
        }
    }

此代码来自我工作的旧非故事板应用程序。

基本上,它使用新的 loadRequest 重新加载当前所在的相同视图并将其推送到堆栈顶部,因此用户可以返回上一个 loadRequest。

现在有了故事板,我不知道如何用 segue 完成相同的功能,我需要调用这些操作并将控制器推送到堆栈上。

我试过 performSegueWithIdentifier 但没有运气。

如果我对 webview 使用 NSURL 加载请求而不在堆栈上推送视图控制器的新实例,则它可以工作。

但我需要用户能够返回。

有什么想法可以做到这一点吗?

4

2 回答 2

0

我通过使用解决了这个问题:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

并通过其 ID 获取故事板项目,然后使用旧的 pushViewController。

达到了同样的效果。

于 2013-10-14T01:42:50.887 回答
0

您可以使用UIWebView'sgoBack方法:

goBack
加载后退列表中的前一个位置。

您可以在导航栏或额外的工具栏中添加一些按钮来完成此操作。这肯定比推送一个新的视图控制器实例更好。

顺便说一句,您可以通过将 segue 拖动到故事板中的同一视图控制器来通过 segue 将视图控制器推到自身上。

于 2013-10-13T23:10:14.793 回答