每次按Tab键加载初始webview

时间:2018-03-02 09:39:35

标签: objective-c webview delegates tabview

被修改

按下标签栏时会加载我的初始网页视图,然后点击网页视图时,我会调用 - (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。

1 个答案:

答案 0 :(得分:0)

澄清你正在尝试做什么......

您的问题与网页浏览或加载网址无关。问题是你导航到NavigationController中的新VC,然后切换标签,然后切换回来,你仍然在&#34;推动&#34; VC。

  

与问题无关的评论:

     

我在Tab-A上,观看VC-A1 ... Via&#34; normal&#34;导航控制器   动作,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

这将有效,但它会重置&#34;每个选项卡中的任何导航控制器您需要添加一些其他逻辑来处理第一个标签。

(原始答案)

viewDidLoad仅在视图加载时调用一次。在标签之间切换不会重新加载&#34;视图。

您可能希望在viewWillAppear中重新加载原始网址,因为每次切换回该标签时都会调用该网址。

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

而且......你从不想要致电[self viewWillAppear:YES]; - 这是系统提供的通知。