Objective C - WebView无法从顶部重新加载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objective C - WebView无法从顶部重新加载相关的知识,希望对你有一定的参考价值。

我有一个webpage,有很多项目。我希望用户在点击标签栏项目时刷新页面。我设法在点击标签栏项目时调用该方法来加载Web视图。但它只是不会从顶部重新加载。似乎webview正在从它的位置或缓存或其他东西加载。我试过removecahce,但似乎没有用。我希望它再次从顶部重新加载。我不能使用viewWillAppear因为我不希望页面在从detail页面返回时重新加载。我还希望在点击标签栏项目时重新加载页面。

重新加载你浏览的地方,我需要从顶部重新加载重新加载。

Long list

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 无法识别的选择器

JavaScript 未从 Objective C 执行

使用 Ajax 从 UIWebView 调用 Objective C 函数

在 Objective C 中构建网页请求