2013-04-26 11 views
5

Provo a calcolare la dimensione di un UIWebView con un dato contenuto, ma senza mostrare la vista. Ho solo bisogno di sapere la dimensione.UIWebView: il delegato non si chiamerà

Il mio problema: quando eseguo il codice, il delegato di UIWebView non viene chiamato. Perché?

MessageSizeCaluclator.h

#import < Foundation/Foundation.h> 

@class Message; 

@interface MessageSizeCaluclator : NSObject <UIWebViewDelegate> 

- (id)initWithMessage:(Message*)message; 
- (void)saveSize; 

@end 

MessageSizeCaluclator.m

#import "Message.h" 
#import "MessageSizeCaluclator.h" 


@interface MessageSizeCaluclator() <UIWebViewDelegate> 

@property (strong, nonatomic) Message* message; 
@property (strong, nonatomic) UIWebView* webView; 

@end 


@implementation MessageSizeCaluclator 

@synthesize message = _message; 
@synthesize webView = _webView; 


- (id)initWithMessage:(Message*)message 
{ 
self = [super init]; 

if (self) { 
    _message = message; 

    // WebView 
    _webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)]; 
    _webView.delegate = self; 
} 

return self; 
} 

- (void)saveSize 
{ 
NSLog(@"%s message = %@", __PRETTY_FUNCTION__, _message.text); 

[_webView loadHTMLString:[NSString stringWithFormat:@"<div style='font-family:Helvetica;font-size:13px;'>This is a test</div>", _message.text] 
           baseURL:nil]; 
} 

#pragma mark - Web view delegate 

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 
{ 
NSLog(@"%s", __PRETTY_FUNCTION__); 
} 

- (void)webViewDidStartLoad:(UIWebView *)webView 
{ 
NSLog(@"%s", __PRETTY_FUNCTION__); 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
NSLog(@"%s", __PRETTY_FUNCTION__); 
} 

@end 

attuazione

MessageSizeCaluclator* messageSizeCalculator = [[MessageSizeCaluclator alloc] initWithMessage:message]; 
    [messageSizeCalculator saveSize]; 
+0

Al punto in cui viene chiamato il tuo codice, non c'è nessuna vista, nessuna ragione per cui non stai facendo questo in viewDidLoad? – Tim

+0

@Tim 'MessageSizeCaluclator' non è un controller di visualizzazione, è solo un oggetto che crea un'istanza di una visualizzazione Web. – Caleb

+0

Ah, mio ​​errore, non ho letto la dichiarazione dell'interfaccia. – Tim

risposta

7

Aggiungi la tua UIWebView a qualche UIView, fare il suo telaio fuori campo (modo che gli utenti non possono vedere esso). I metodi delegati non vengono mai chiamati se UIWebView non si trova nella gerarchia di visualizzazione dell'app.

+1

+1 Questo suona bene. Finché la visualizzazione Web non fa parte di una gerarchia di viste, il caricamento dei dati è solo una perdita di tempo e di energia della batteria. – Caleb

+0

Oppure imposta il suo alfa su 0 – ChrisH

Problemi correlati