目标C - 再次点击标签栏项目时,如何再次重新加载网页视图?
Posted
技术标签:
【中文标题】目标C - 再次点击标签栏项目时,如何再次重新加载网页视图?【英文标题】:Objective C - When tapping the tab bar item again, how to reload web view again? 【发布时间】:2018-09-04 07:18:00 【问题描述】:我真的需要帮助。最初,通过点击标签栏项目,我将在Gym VC
上加载webview
,然后用户将向下滚动web view
我想要完成的是当用户再次点击相同的标签栏项目时,webView
将再次重新加载。我设法从MyTabBarController
调用方法handleRefresh
但该方法根本没有做任何事情。非常感谢任何指导。
目前我有以下代码
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];
健身房.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];
【问题讨论】:
注意:不要打电话给-[NSUSerDefaults synchronize]
。来自Apple's documentation... “这个方法是不必要的,不应该使用。”
【参考方案1】:
首先,我想建议您为什么每次点击标签栏时都会启动一个新的 Gym 对象,您应该获取 Gym 对象的引用并在其为 nil 时对其进行初始化,然后使用引用进行处理,但这可能是您的要求如果是,我想建议您创建一个 BOOL 变量,让我们说 isUpdateRequire 并且当您实例化您的视图控制器时分配 isUpdateRequire = true
。然后在视图的末尾确实加载或视图会出现(根据您的需要)检查
if isUpdateRequire
[self handleRefresh:nil]
或者,您可以在 webviewcontroller 中创建协议并将其委托分配给您的 tabbarcontroller,并在需要时触发委托方法。
如果您不想在返回 vc 时调用该方法,只需将此条件放在 viewWillAppear 中
if self.isMovingToParentViewController
[self handleRefresh:nil]
【讨论】:
对不起,我是个菜鸟,请您详细说明一下 好的,你想知道什么? 实际上我试图阻止Gym Detail
的后退按钮重新加载Gym
页面。我希望用户回到他们在Gym
页面滚动的位置。那么如何真正防止调用viewDidAppear
我也在尝试在再次点击标签栏项目以再次刷新webview
时重新加载页面。
好吧,那你为什么不在viewwillappear中调用handleRefresh方法呢?
是的,它适用于第一个,因为它在 viewDidLoad 处加载以上是关于目标C - 再次点击标签栏项目时,如何再次重新加载网页视图?的主要内容,如果未能解决你的问题,请参考以下文章
Objective C - WebView无法从顶部重新加载