Objective C - WebView无法从顶部重新加载
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objective C - WebView无法从顶部重新加载相关的知识,希望对你有一定的参考价值。
我有一个webpage
,有很多项目。我希望用户在点击标签栏项目时刷新页面。我设法在点击标签栏项目时调用该方法来加载Web视图。但它只是不会从顶部重新加载。似乎webview
正在从它的位置或缓存或其他东西加载。我试过removecahce
,但似乎没有用。我希望它再次从顶部重新加载。我不能使用viewWillAppear
因为我不希望页面在从detail
页面返回时重新加载。我还希望在点击标签栏项目时重新加载页面。
重新加载你浏览的地方,我需要从顶部重新加载重新加载。
MyTabBarController.m
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if([viewController isKindOfClass:[ClassNavigationController class]]) {
Classes *myClasses = [[Classes alloc] init];
[myClasses reloadWebView];
}
}
Classes.m
- (void)LoadClasses {
sURL = @"www.longlist.com"
NSURL *url = [NSURL URLWithString:sURL];
sRefresh = sURL;
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[webView loadRequest:urlRequest];
[webView setDelegate:(id<UIWebViewDelegate>)self];
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
[webView.scrollView addSubview:refreshControl];
}
//=== Not Working
-(void)reloadWebView{
[webView reload];
}
您可以通过在加载CGPointZero时将其内容插入到CGPointZero来将webView滚动到顶部。
这是代码:
[webview.scrollView setContentInset:CGPointMake(0, 0)];
您可以在代表协议的帮助下实现所需的目标。
首先通过Docs!以更好地理解这个概念。
现在代码,转到MyTabBarController.h文件并添加以下代码。
@protocol reloadWeb<NSObject> // The reloadWeb is our protocol and can be named as you like
-(void)reloadWebViewData; // This is the method to be called on the location you want the reload function to be called
@end
@interface MyTabBarController : UITabBarController
@property(nonatomic,assign)id<reloadWeb> reloadDelegate; // Here we create an object for the protocol.
然后在MyTabBarController.m上,并更新didSelectViewController
方法,如下所示
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
if ([viewController isKindOfClass:[newViewController class]]) { // Here newViewController is the controller where the webview reload happens.
[[[newViewController alloc] init] reloadWebViewData]; // We create and instance for the new controller and call the delegate method where the reload works.
}
}
现在newViewController.h
#import "MyTabBarController.h"
@interface newViewController : UIViewController<reloadWeb> // Here we have to confirm the protocol "reloadWeb" we created in order to access the delegate method
@end
最后在newViewController.m上
#import "newViewController.h"
#import "MyTabBarController.h"
@interface newViewController ()
@end
@implementation newViewController
- (void)viewDidLoad {
[super viewDidLoad];
/*We have to assgin delegate to tab controller where protocol is defined so from there the "reloadWebViewData" method can be called*/
MyTabBarController * tab = [[MyTabBarController alloc] init];
tab.reloadDelegate = self;
}
-(void)reloadWebViewData{
NSLog(@"Reload Webview Data here ");
}
如果您错过了添加上述方法(“reloadWebViewData”),Xcode将显示警告以确认协议“reloadWeb”,因为缺少委托方法。
干杯!
以上是关于Objective C - WebView无法从顶部重新加载的主要内容,如果未能解决你的问题,请参考以下文章
使用 webView Objective C 加载到另一个 VC 的可点击条款和政策
无法访问扩展 Objective-C 类的 Swift 类中的私有变量
Objective-C + WKWebkit 无法识别的选择器