Код делегата UIWebView не выглядит правильным - PullRequest
0 голосов
/ 19 мая 2011

Я реализовал пример кода, используя найденный мной UIWebView, но он мне не подходит, хотя и работает.В частности, потому что он устанавливает делегат UIWevView дважды (в viewDidLoad и viewWillAppear).Кроме того, myWebView устанавливается как объект автоматического выпуска, но затем он освобождается в dealoc.Я надеюсь, что кто-то может сказать мне, как убрать это.

// *** WebViewController.h ***

@interface WebViewController : UIViewController 
<UIWebViewDelegate>
{   
    UIWebView *myWebView;
    UIActivityIndicatorView *activityIndicator;
}

@property (nonatomic, retain) UIWebView *myWebView;
@property (nonatomic, retain) UIActivityIndicatorView *activityIndicator;

@end

// *** WebViewController.m ***

@synthesize myWebView;

- (void) viewDidLoad {
    [super viewDidLoad];

    // - - - - -> Create the UIWebView

    CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
    webFrame.origin.y += 42.0;
    webFrame.size.height -= 106.0;

    self.myWebView = [[[UIWebView alloc] initWithFrame:webFrame] autorelease];
    self.myWebView.backgroundColor = [UIColor whiteColor];
    self.myWebView.scalesPageToFit = YES;
    self.myWebView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
    self.myWebView.delegate = self;
    [self.view addSubview: self.myWebView];

    // - - - - -> Create the UIActivityIndicatorView

    self.activityIndicator = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite] autorelease];
    [self.view addSubview: self.activityIndicator];
    self.activityIndicator.center = CGPointMake(135,438);

    [self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.someURL.com/"]]];

- (void) viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];
   self.myWebView.delegate = self;
}

- (void) viewWillDisappear:(BOOL)animated {

    [super viewWillDisappear:animated];
    [self.myWebView stopLoading];   
    self.myWebView.delegate = nil;  
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

- (void) dealloc {
    myWebView.delegate = nil;
    [myWebView release];
    [activityIndicator release];
    [super dealloc];
}

1 Ответ

0 голосов
/ 19 мая 2011

Это очень хорошо, чтобы сделать это. Идея довольно проста. Вы не хотите, чтобы делегат получал какие-либо сообщения о делегировании, находясь вне экрана. Так что идея установки делегата -viewWillAppear: и -viewWillDisappear: верна. Но я не вижу каких-либо методов делегатов, реализованных в коде.

...