每次按Tab键加载初始webview

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每次按Tab键加载初始webview相关的知识,希望对你有一定的参考价值。

Edited

按下标签栏时会加载我的初始webview,然后在webview上单击时,我调用- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType来检测点击的URLString

当字符串匹配我的目标字符串时,我将调用segue [self performSegueWithIdentifier:@"NewsDet" sender:self];并传递URLString并在另一个ViewController上加载详细信息页面

现在,当我单击另一个标签栏然后单击返回此标签栏时。细节页面仍然存在。我想刷新回初始页面。我该怎么办?

我需要创建一个子类为tabviewcontroller的新类吗?请帮忙。

Gym.m

- (void)viewDidLoad {
[super viewDidLoad];
appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
sURL = appDelegate.gURL;
sURL = [sURL stringByAppendingString:@"/apps/gym.asp"];
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)handleRefresh:(UIRefreshControl *)refresh {

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

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

- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];

appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
sURL = appDelegate.gURL;
sURL = [sURL stringByAppendingString:@"/apps/gym.asp"];
NSURL *url = [NSURL URLWithString:sURL];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[webView setDelegate:(id<UIWebViewDelegate>)self];
[webView loadRequest:urlRequest];

 }

GymDet.m

 - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
sURL = self.urlString;

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

StoryBoard

基本上我有5个标签控制器。每个标签都有一个导航控制器。当我点击说Tab-A它将在VC1中加载初始webview然后当我点击webview URL时,它将导航到一个新VC说VC2并加载详细页面。现在,如果我点击说Tab-B然后再回到Tab-A。我希望它加载最初的webview或VC1。现在,我的程序始终保持在VC2。

答案

在澄清你想要做什么之后......

您的问题与网页浏览或加载网址无关。问题是您正在导航到NavigationController中的新VC,然后切换选项卡,然后切换回来,您仍处于“推送”VC。

与此问题无关的评论:

我在Tab-A上,查看VC-A1 ...通过“普通”导航控制器动作,VC-A2从右侧滑入。现在我选择Tab-B,我看到VC-B1。现在,我想切换回Tab-A,我希望看到那里有什么:VC-A2 ......但是,你想把我送回VC-A1。这实际上并不遵循Apple的界面指南,并且可能会让您的用户感到非常困惑。

但是,要实现这一点,您需要继承UITabBarController并实现didSelectViewController

#import "MyTabBarViewController.h"

@interface MyTabBarViewController () <UITabBarControllerDelegate>

@end

@implementation MyTabBarViewController

- (void) viewDidLoad {
    [super viewDidLoad];
    self.delegate = self;
}

-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    if ([viewController isKindOfClass:[UINavigationController class]]) {
        [(UINavigationController *)viewController popToRootViewControllerAnimated:NO];
    }
}

@end

这将有效,但它将“重置”每个选项卡中的任何导航控制器。您需要添加一些其他逻辑来仅处理第一个选项卡。


(原始答案)

viewDidLoad只被调用一次 - 当视图加载时。在标签之间切换不会“重新加载”视图。

您可能希望在viewWillAppear中重新加载原始URL,因为每次切换回该选项卡时都会调用该URL。

虽然,您可能还想检查原始URL是否是显示的当前URL - 如果不是,您可能只想重新加载它。

而且......你永远不想打电话给[self viewWillAppear:YES];--这是系统提供的通知。

以上是关于每次按Tab键加载初始webview的主要内容,如果未能解决你的问题,请参考以下文章

android webview加载过程中按返回键返回问题

详解Android WebView加载html片段

android webview不加载片段

加载后和 webview 之前相同的初始屏幕

【BUG笔记】WebView返回时重复加载问题(CanGoBack返回true)

没有带有拉动刷新的互联网消息 webview 片段