【问题标题】:How to [UIWebView loadRequest:] without pushing in a new ViewController如何在不推入新 ViewController 的情况下 [UIWebView loadRequest:]
【发布时间】:2012-10-04 18:52:11
【问题描述】:

我想要的功能是这样的:

我有一组 URL,我想将它们加载到现有的 UIWebView 中,而无需推入新的 ViewController。我只是希望 webView 重新加载没有动画或滑动。

现在,这是我在 ViewController 中的实现:

@synthesize webView;

@synthesize requestObj;

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization

    //I show a spinner while it is loading. This is done in webViewDidStartLoad:
    viewLoading = YES;

    //this is landing URL, so I draw some buttons in viewDidLoad
    home = YES;  

    //I load this request into my webView in viewDidLoad
    requestObj = [NSURLRequest requestWithURL:[NSURL URLWithString:myURL]];
    }
    return self;
}

然后,在 ViewController 中的某个地方,如果有人在我的滑动菜单中按下特定 URL,我会调用:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:newUrl]];
[webView loadRequest:request];

如果不将新版本的 ViewController 推入堆栈,我无法弄清楚如何将这个新 URL 加载到令人兴奋的 webView 中。每次它在 ViewController 中调用我的 initWithNibName: 方法时,我都想不出一个好的方法来阻止它把自己推到堆栈上,而只是更新 webView。

我可以使用 [self.navigationController setViewControllers:] 来创建一个新的 ViewController 并阻止控制器绘制 backButton,但它仍然在滑动。

必须有一种简单的方法来重新加载我只是没有得到的 webView。有什么建议吗?

【问题讨论】:

  • 我可以从中收集到的是你有一个带有一些 url 的菜单,可能是一个 tableview,然后在 didSelectRow... 方法中你推送你的视图控制器?在现有 UIWebView 上调用 loadRequest 不会创建新的视图控制器,因此您必须在其他地方执行此操作。如果是这种情况,您需要提供一种方法来访问当前显示的视图控制器及其拥有的 UIWebView。
  • @matt 我正要拒绝你的评论,但在听起来无知之前,我检查了我的代码以确保我知道我在说什么。我注意到我是在我的类 ViewController 的一个类别中进行调用的。这可能只是问题所在。让我重新调整一下,看看它是否有效!
  • arrg,没有修复它,它正在重新加载,但它是通过滑动来完成的。我需要继续玩弄它。

标签: ios uiviewcontroller uiwebview


【解决方案1】:

好的,我知道为什么会出现这种情况:

我正在从 webView 捕获一些 URL,并在方法中推送一个新的 ViewController:

BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType

我没有正确检查我只想重新加载而不是推送的 URL。因此,每次调用上述方法时,它都会使用 URL 推送一个新的 ViewController。

我进去了,得到了一个我不想被推到另一个视图中的 URL 的子字符串:

- (BOOL)homeURL:(NSString *)url
{
    BOOL match = NO;
    url = [self urlType:url];

    if ((url) && ((NSOrderedSame == [url compare:subtring])))
    {
        match = YES;
    }

    return match;
}

- (NSString *)urlType:(NSString *)url
{
    NSRange beginSubstring = [url rangeOfString:@"com/"];
    NSString *val = url;

    if (url)
    {
        val = [val substringWithRange:NSMakeRange((beginSubstring.location + 4), substring.length)];
    }

    return val;
}

然后我修复了上面的方法来捕获子字符串:

//capture URL
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{

    if (!viewLoading)
    {
        if ([self homeURL:request.URL.absoluteString])
        {
            return YES;
        }
        else
        {
            ViewController *newPage = [[ViewController alloc] initWithNibName:@"ViewController" request:request home:NO bundle:nil];
            [self.navigationController pushViewController:newPage animated:YES];
            return NO;
        }
    }


    return YES;
}

现在看来效果不错!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多