UIWebView не загружается и не появляется при программном создании

Я отлаживаю кастом UIViewController подкласс, который оборачивает UIWebView так что мы можем обрабатывать пользовательские URL-адреса.

Кажется, у меня нет проблем с добавлением соответствующих представлений в иерархию, но когда я звоню loadRequest: в веб-просмотре ничего не отображается. Кажется, что он даже не пытается выполнить запрос - мой подкласс устанавливает себя как UIWebViewделегат, но не получает от него никаких обратных вызовов делегатов, даже webViewDidStartLoad или же shouldStartLoadWithRequest (!). Что может быть причиной этого?

Ниже приведен соответствующий код из моего класса:

- (void)viewDidLoad {
    [super viewDidLoad];

    // add the webview
    m_webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 400)];
    m_webView.delegate = self;
    m_webView.dataDetectorTypes = UIDataDetectorTypeNone;

    // adding a border to see if the view is visible onscreen
    [[m_webView layer] setBorderColor:[[UIColor darkGrayColor] CGColor]];
    [[m_webView layer] setBorderWidth:50];

    [self.view addSubview:m_webView];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES];

    NSURLRequest *request = [NSURLRequest requestFromUrl:[NSURL urlFromString:@"http://www.google.com"]];
    [self.m_webView loadRequest:request];
    NSLog(@"Loading URL: %@ in view: %@; delegate set as %@", @"http://www.google.com", m_webView, m_webView.delegate);
    NSLog(@"WebView is %@", self.m_webView.loading ? @"loading" : @"not loading");

}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSLog(@"Loading URL of type %@, relative = %@", [[request URL] scheme], [[request URL] relativeString]);
    return YES;
}

- (void)webViewDidStartLoad:(UIWebView *)webView {
    NSLog(@"Started");
}

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

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"Finished");
    [self finishedReloading];
}

И код из контроллера для родительского представления, который пытается добавить экземпляр этого (в настоящее время находится в методе viewDidLoad этого контроллера):

ZUIWebViewController *testWebView = [[[ZUIWebViewController alloc] initWithAddress:@"deal/recentDrops"] autorelease];
[m_scrollView addSubview:testWebView.view];
[testWebView viewWillAppear:YES];
NSLog(@"Added webview");

Результат, когда я запускаю это:

Loading URL: http://www.google.com in view: <UIWebView: 0x1114eb30; frame = (0 0; 320 480); layer = <CALayer: 0x1114eb90>>; delegate set as <ZUIWebViewController: 0x1114d7a0>
Webview is not loading
Added webview

Иерархия представления после сообщения "Добавленный веб-просмотр":

(lldb) po [m_scrollView recursiveDescription]
(id) $1 = 0x0a634b00 <UIView: 0xbba3430; frame = (0 20; 320 460); autoresize = W+H; layer = <CALayer: 0xbba3840>>
   | <UIImageView: 0xbba3490; frame = (0 0; 320 480); userInteractionEnabled = NO; layer = <CALayer: 0xbba3940>>
   | <UIScrollView: 0xbba4390; frame = (0 0; 320 480); clipsToBounds = YES; gestureRecognizers = <NSArray: 0xbba4680>; layer = <CALayer: 0xbba4560>; contentOffset: {0, 0}>
   |    | <UIWebView: 0xbba4840; frame = (0 0; 320 480); layer = <CALayer: 0xbba48a0>>
   |    |    | <_UIWebViewScrollView: 0xbba6b70; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = H; gestureRecognizers = <NSArray: 0xbba6f40>; layer = <CALayer: 0xbba6da0>; contentOffset: {0, 0}>
   |    |    |    | <UIImageView: 0xbba7860; frame = (0 0; 54 54); transform = [-1, 0, -0, -1, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba78c0>>
   |    |    |    | <UIImageView: 0xbba77d0; frame = (0 0; 54 54); transform = [0, 1, -1, 0, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba7830>>
   |    |    |    | <UIImageView: 0xbba7740; frame = (0 0; 54 54); transform = [0, -1, 1, 0, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba77a0>>
   |    |    |    | <UIImageView: 0xbba76b0; frame = (0 0; 54 54); alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba7710>>
   |    |    |    | <UIImageView: 0xbba7620; frame = (-14.5 14.5; 30 1); transform = [0, 1, -1, 0, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba7680>>
   |    |    |    | <UIImageView: 0xbba7590; frame = (-14.5 14.5; 30 1); transform = [0, -1, 1, 0, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba75f0>>
   |    |    |    | <UIImageView: 0xbba7500; frame = (0 0; 1 30); transform = [-1, 0, -0, -1, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba7560>>
   |    |    |    | <UIImageView: 0xbba7470; frame = (0 0; 1 30); alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba74d0>>
   |    |    |    | <UIImageView: 0xbba73e0; frame = (0 450; 320 30); alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba7440>>
   |    |    |    | <UIImageView: 0xbba7380; frame = (0 0; 320 30); transform = [-1, 0, -0, -1, 0, 0]; alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xbba72e0>>
   |    |    |    | <UIWebBrowserView: 0x13baa200; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0xbba5d50>; layer = <UIWebLayer: 0xbba4930>>
   |    |    |    |    | <TileHostLayer: 0xbba4a00> (layer)
   |    |    |    |    |    | <TileLayer: 0xbba7ef0> (layer)

Так что не похоже, что есть что-то перед UIWebView Я пытаюсь показать.

Что может быть причиной этого, и какие еще шаги я должен предпринять для отладки?

1 ответ

Вы загружаете веб-представление в viewWillAppear, а затем в viewDidLoad (который вызывается после viewWillAppear) вы создаете веб-представление. что должно быть наоборот. создать веб-просмотр и затем загрузить запрос.

Просто сохраните все в viewDidLoad, иначе появится представление, создайте веб-просмотр и загрузите запрос. это должно работать нормально.

Другие вопросы по тегам