每次按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];
}
基本上我有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的主要内容,如果未能解决你的问题,请参考以下文章