2013-04-26 2 views
5

주어진 내용으로 UIWebView의 크기를 계산하려고하지만 뷰를 표시하지 않습니다. 크기 만 알면됩니다.UIWebView : 대리인이 호출되지 않습니다.

문제점 : 코드를 실행하면 UIWebView의 대리자가 호출되지 않습니다. 왜?

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 

구현

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

코드가 호출 될 때 viewDidLoad에서이 작업을 수행하지 않는 이유가 없습니다. – Tim

+0

@Tim'MessageSizeCaluclator'는 뷰 컨트롤러가 아니며 웹 뷰를 인스턴스화하는 객체 일뿐입니다. – Caleb

+0

아, 내 실수는 인터페이스 선언을 읽지 않았다. – Tim

답변

7

은, 일부의 UIView에있는 UIWebView 추가 사용자가 볼 수없는 오프 스크린 (그래서 그 프레임을 그것). UIWebView가 앱의 뷰 계층 구조에없는 경우에는 위임 메서드가 호출되지 않습니다.

+1

+1이 말이 맞아. 웹보기가 뷰 계층 구조의 일부가 될 때까지 데이터로드는 시간과 배터리 전력 낭비 일뿐입니다. – Caleb

+0

또는 알파를 0으로 설정하십시오. – ChrisH

관련 문제