Цель C - При повторном нажатии на элемент панели вкладок, как снова загрузить веб-представление? - PullRequest
0 голосов
/ 04 сентября 2018

Мне действительно нужна помощь, пожалуйста. Первоначально, нажав на элемент панели вкладок, я загружу webview на Gym VC, а затем пользователь прокрутит вниз web view. Я пытаюсь выполнить следующее: когда пользователь снова нажмет на тот же элемент панели вкладок, webView снова перезагрузится. Мне удалось вызвать метод handleRefresh из MyTabBarController Но метод вообще ничего не делает. Любое руководство высоко ценится.

В настоящее время у меня есть следующий код

MyTabBarController.m

#import "GymNavigationController.h"
#import "Gym.h"

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    if([viewController isKindOfClass:[GymNavigationController class]]){

        Gym *myGym = [[Gym alloc] init];
        [myGym handleRefresh:nil];
     }
}

Gym.m

#import "Gym.h"
#import "AppDelegate.h"
#import "GymDet.h"
#import <QuartzCore/QuartzCore.h>

@interface Gym () {

AppDelegate *appDelegate;
NSString *sURL, *sRefresh; 

}

@end

@implementation Gym

@synthesize webView;

- (void)viewDidLoad {

    [super viewDidLoad];

    appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    sURL = appDelegate.gURL;
    sURL = [sURL stringByAppendingString:@"/apps/gym.asp?"];

    NSLog(@" The sURL to be load for the current page : %@ ", sURL);

    sRefresh = sURL;

    [defaults setObject:sRefresh forKey:@"txtRefresh"];
    [defaults synchronize];

    NSURL *url = [NSURL URLWithString:sURL];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    [webView setDelegate:(id<UIWebViewDelegate>)self];
    [webView loadRequest:urlRequest];

    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
    [refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
    [webView.scrollView addSubview:refreshControl];

}

- (void) viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

    //[self handleRefresh:nil];

    [[self navigationController] setNavigationBarHidden:YES animated:YES];
}

-(void)viewDidDisappear:(BOOL)animated{

    [[self navigationController] setNavigationBarHidden:NO animated:YES];
}

- (void)handleRefresh:(UIRefreshControl *)refresh {

    //--- Call the stored txtMemCode, something like session ---
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    sRefresh = [defaults objectForKey:@"txtRefresh"];

    NSURL *url = [NSURL URLWithString:sRefresh];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

    [webView loadRequest:urlRequest];
    [refresh endRefreshing];
}

1 Ответ

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

Сначала я хотел бы предложить, почему вы инициируете новый объект Gym каждый раз, когда вы нажимаете на вкладку, вы должны взять ссылку на объект Gym и инициализировать его, если его значение равно nil, затем обработать ссылку, но это может быть вашим требованием и если это так, я хотел бы предложить вам создать переменную BOOL, скажем, isUpdateRequire, и когда вы создаете экземпляр вашего viewcontroller, присвойте isUpdateRequire = true. Затем в конце просмотра загрузится или появится представление (в соответствии с вашими потребностями) проверка

if isUpdateRequire {
    [self handleRefresh:nil]
}

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

и если вы не хотите, чтобы метод вызывался при возвращении в vc, просто поместите это условие в viewWillAppear

if self.isMovingToParentViewController { 
    [self handleRefresh:nil] 
}
...