ObjectiveC - WebView не перезагружается сверху - PullRequest
0 голосов
/ 30 августа 2018

У меня есть webpage с длинным списком предметов. Я хочу, чтобы пользователь обновил страницу, когда он нажал на элемент панели вкладок. Мне удается вызвать метод для загрузки веб-представления, когда они касаются элемента панели вкладок. Но он просто не перезагружается заново с вершины. Похоже, 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];
}

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

То, что вы ищете, может быть достигнуто с помощью Делегатов протоколов .

Сначала пройдите Документы! для лучшего понимания концепции.

Теперь код, перейдите к вашему 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", так как метод делегата отсутствует.

Ура!

0 голосов
/ 30 августа 2018

Вы можете прокрутить веб-представление до вершины, установив для его содержимого вставку CGPointZero во время загрузки.

Вот код:

[webview.scrollView setContentInset:CGPointMake(0, 0)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...