我有一个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];
}
答案 0 :(得分:0)
您可以通过在加载时将其内容设置为CGPointZero来将webView滚动到顶部。
代码如下:
[webview.scrollView setContentInset:CGPointMake(0, 0)];
答案 1 :(得分: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”。
干杯!