更改设置时更新UIWebView

时间:2012-10-08 00:40:42

标签: objective-c ios xcode

Settings.bundle中,我有一个带有标识符url_preference的文本输入。

使用ViewController.hViewController.m和我的故事板我设置UIWebView,显示设置中的网址:

- (void) updateBrowser {   
    NSString *fullURL = [[NSUserDefaults standardUserDefaults] stringForKey:@"url_preference"];
    NSURL *url = [NSURL URLWithString:fullURL];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [_EmbeddedBrowser loadRequest:requestObj];    
}

这很有效。

但是,当更改“设置”中的网址时,UIWebView不会更新以反映新网址。

通过禁止应用在后台运行,解决了未反映更新网址的问题。但是,出现了一个新问题:如果“设置”中的URL保持不变,则不会保留会话。 UIWebView只应在url_preference发生更改后才会更新。

我一直试图在applicationWillEnterForeground中使用AppDelegate.m强制UIWebView重新加载,但是我遇到了麻烦。

在ViewController中,我可以运行:

- (void)viewDidLoad {
     [self updateBrowser];
}

但是当我尝试在App Delegate中运行相同的东西时它不会更新:

- (void)applicationWillEnterForeground:(UIApplication *)application
{

    ViewController *vc = [[ViewController alloc]init];
    [vc updateBrowser];
}

(我还在- (void) updateBrowser;中添加了ViewController.h,在#import "ViewController.h"中添加了AppDelegate.m

谢谢。

1 个答案:

答案 0 :(得分:2)

- (void)viewDidLoad
{
    [self updateBrowser];
    [super viewDidLoad];
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self
               selector:@selector(defaultsChanged:)
                   name:NSUserDefaultsDidChangeNotification
                 object:nil];
}

- (void)defaultsChanged:(NSNotification *)notification {
    [self updateBrowser];
}

- (void) updateBrowser {

    NSString *fullURL = [[NSUserDefaults standardUserDefaults] stringForKey:@"url_preference"];
    NSURL *url = [NSURL URLWithString:fullURL];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [_EmbeddedBrowser loadRequest:requestObj];

}

幸运的是,没有必要在这种情况下使用AppDelegate。实际上有一个通知,您可以在默认设置更改时收听。您必须将ViewController设置为观察者,并在每次发送NSUserDefaultsDidChangeNotification时执行一个函数。每次在设置中更改应用程序的默认设置时,都会自动发生此通知。这样,只要设置发生变化,您就不必在每次应用程序到达前台时刷新。