2016-03-23 2 views
0

У меня странная проблема с моим UIWebView, он не принимает никаких изменений.iOS UIWebView не принимает изменение URL

Когда я запускаю приложение, он отлично загружает URL-адрес, методы делегирования запускаются так же, как и должно быть, НО UIWebView не принимает никаких действий после этого, например, скрывает его или изменяет его URL-адрес. Когда я вызываю [webView loadRequest:urlRequest];, чтобы изменить текущий URL-адрес на другой, запущены методы делегирования, но WebView продолжает просматривать страницу OLD, без изменений (только индикатор показывает несколько секунд, а затем команды журнала в webViewDidStartLoad ии shouldStartLoadWithRequest отлично работают) ,

Вот сценарий ниже:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSLog(@"viewDidLoad"); 

    NSString *urlString = @"http://old.example.com"; 
    NSURL *url = [NSURL URLWithString:urlString]; 
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; 
    [webView loadRequest:urlRequest]; 

    // For here, everything is fine, the WebView loads the OLD URL 

    webView.delegate = self; 
    webView.opaque = NO; 
    webView=[[UIWebView alloc]init]; 
    [webView setBackgroundColor:[UIColor grayColor]]; 
    [webView setDelegate:(id<UIWebViewDelegate>)self]; 
    [self.view addSubview:webView]; 

    activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    activityIndicator.frame = CGRectMake(200.0, 200.0, 100.0, 40.0); 
    activityIndicator.center = self.view.center; 
    [self.view addSubview: activityIndicator]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(loadNotificationUrl:) 
               name:@"loadNotificationUrl" object:nil]; 

} 

-(void)loadNotificationUrl:(NSNotification*) notification 
{ 
    // Now the notification arrives holding the NEW URL 
    NSDictionary* userInfo = notification.userInfo; 
    NSString* NotificationUrl = (NSString*)userInfo[@"url"]; 
    NSLog (@"Successfully received: %@", NotificationUrl); // it gets --> "http://new.example.com" 

    NSURL *url = [NSURL URLWithString:NotificationUrl]; 
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; 
    NSLog(@"Before Load: %@", [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"]); // --> this is showing "about:blank"!! 

    [webView loadRequest:urlRequest]; // This works but doesn't change anything in the WebView! OLD page still showing. 


} 

Может кто-нибудь пожалуйста, скажите мне, что мне не хватает?

ответ

2

Исходный запрос загружается в другом веб-представлении, чем в будущем. Если вы посмотрите в коде у вас есть [webView loadRequest:urlRequest];

, а затем несколько строк вниз у вас есть webView=[[UIWebView alloc]init];, который устанавливает webView переменные новый UIWebView, например, которые вы затем добавить к вашему мнению. Этот веб-вид не отображается, хотя, поскольку он является фреймом, предположительно CGRectZero. Методы делегатов запускаются, потому что вы задали делегат нового экземпляра как self, но снова вы не видите результат.

Удалите webView=[[UIWebView alloc]init];, и все может вести себя так, как вы ожидаете, при условии, что вы инициализировали веб-представление в другом месте.

+0

Вы сделали мой день человеком, спасибо! Для чего это? 'webView = [[UIWebView alloc] init];' – tinyCoder

1

после loadRequest: urlRequest, вы создали новый интерфейс UIWebView, который переопределяет старый веб-просмотр, пожалуйста, удалите его.

0

Переместить эту строку:

webView=[[UIWebView alloc]init]; 

до этой линии:

[webView loadRequest:urlRequest]; 

в этом методе:

viewDidLoad 
0

с отделением Webview = [UIWebView Alloc] инициализации]; должен работать

Смежные вопросы