2013-04-26 19 views
5

Próbuję obliczyć rozmiar UIWebView z podaną zawartością, ale bez pokazywania widoku. Muszę tylko znać rozmiar.UIWebView: Delegat nie będzie nazywać się

Mój problem: Kiedy wykonuję kod, delegat UIWebView nie jest wywoływany. Czemu?

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 

wdrożeniowe

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

W miejscu, w którym wywoływany jest twój kod, nie ma widoku, żadnego powodu, dla którego nie robisz tego w viewDidLoad? – Tim

+0

@Tim 'MessageSizeCaluclator' nie jest kontrolerem widoku, to tylko obiekt, który tworzy widok WWW. – Caleb

+0

Ah mój błąd, nie przeczytałem deklaracji interfejsu. – Tim

Odpowiedz

7

Dodaj swoją UIWebView do pewnego UIView, przedstawia swoje ramki poza ekranem (więc użytkownicy nie mogą zobaczyć to). Metody delegatów nigdy nie były wywoływane, jeśli UIWebView nie znajduje się w hierarchii widoku aplikacji.

+1

+1 To brzmi poprawnie. Dopóki widok WWW nie jest częścią hierarchii widoków, ładowanie danych to strata czasu i energii baterii. – Caleb

+0

Lub ustaw jego wartość alfa na 0 – ChrisH

Powiązane problemy