我有一个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”,因为缺少委托方法。
干杯!