我想要的功能是:
我有一组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。有什么建议吗?
答案 0 :(得分:0)
好的,我弄清楚了为什么会出现这种情况:
我正在从webView中捕获一些URL,我正在方法中推送一个新的ViewController:
BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
我没有正确检查我只想重新加载的网址,而不是推送。因此,每次调用上面的方法时,它都会使用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;
}
现在似乎运作良好!