0

我希望每次应用程序处于活动状态时(通过主屏幕启动或双击主页按钮),我的应用程序中的 web 视图都会刷新。

我的 ViewController.m 看起来像这样:

- (void)viewDidLoad
{
NSURL *url = [NSURL URLWithString:@"http://cargo.bplaced.net/cargo/apptelefo/telefonecke.html"];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[_webView loadRequest:req];

[super viewDidLoad];

}

- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[_webView reload];
}

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ( inType == UIWebViewNavigationTypeLinkClicked ) {
    [[UIApplication sharedApplication] openURL:[inRequest URL]];
    return NO;
}

return YES;
}

这段代码有什么问题?提前致谢!

4

1 回答 1

3

我认为viewDidAppear:应用程序获得前景时不会触发;这些 viewWill* 和 viewDid* 方法用于视图转换(模态、推送),与应用程序生命周期事件无关。

您要做的是专门注册前台事件并在收到通知时刷新 web 视图。您将在您的方法中注册通知并在您的viewDidAppear:方法中取消注册它们viewDidDisappear:。您这样做是为了让您的控制器在它消失时不会继续重新加载 web 视图(或尝试重新加载僵尸实例并崩溃),当它没有向用户显示任何内容时。像下面这样的东西应该可以工作:

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

    [_webView reload]; // still want this so the webview reloads on any navigation changes
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];
}

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

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillEnterForegroundNotification object:nil];
}

- (void)willEnterForeground {
    [_webView reload];
}
于 2012-11-25T14:38:15.113 回答