使用UIWebView的storyStartLoadWithRequest与Storyboard和prepareForSegue

时间:2013-10-13 21:28:48

标签: objective-c xcode uitableview uiwebview ios7

我有一个非故事板应用程序,它有一个带有一堆单元格的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加载请求,它就会起作用。

但我需要用户能够回去。

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

2 个答案:

答案 0 :(得分:0)

您可以使用UIWebView的{​​{1}}方法:

  

<强> GoBack的
  加载后续列表中的上一个位置。

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

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

答案 1 :(得分:0)

我通过使用:

解决了这个问题
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

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

达到同样的效果。