UIWebView не загружает страницу - PullRequest
1 голос
/ 28 мая 2009

У меня есть приложение на основе контроллера навигации, которое загружает RSS-канал и выкладывает названия элементов в TableView. Эта часть работает. Когда я нажимаю на заголовок статьи, я хочу поместить экземпляр моего FeedArticleController в стек навигации. Метод loadView FeedArticleController устанавливает представления (так как я хочу научиться делать это программно, а не использовать IB). Вот вид loadView:

- (void)loadView {
    UIView *view = [[UIView alloc] init];
    self.view = view;

    webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    webView.delegate = self;

    [view addSubview:webView];
}

Это имеет смысл? Теперь, чтобы заставить webView действительно загружать страницу, у меня есть метод viewDiDLoad:

- (void)viewDidLoad {
    [super viewDidLoad];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]]; 
}

А затем у меня есть методы делегата, webViewDidStartLoad и webViewDidFinishLoad. Они просто печатают в NSLog.

Я что-то упустил в том, как я сконструировал и добавил представления? Методы делегата, кажется, печатают в журнал после задержки, и при создании экземпляра webView на линии появляется трафик. Итак, я думаю, что он загружает страницу, но не отображается?

Спасибо, ребята.

1 Ответ

3 голосов
/ 29 мая 2009

Здесь нужно рассмотреть две вещи:

  1. Установка для autoresizingMask веб-представления значения UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight, чтобы размер веб-вида изменялся при изменении размера его родительского элемента. Это потому, что по умолчанию и родительский UIView, который вы создали, и UIWebView имеют обнуленные кадры (0,0,0,0). Если установить это значение, то при изменении размера родительского элемента перед выходом на экран веб-представление будет изменено в соответствии с размером.
  2. Не используйте отдельный экземпляр UIView, просто установите self.view для своего экземпляра UIWebView.

Я бы порекомендовал второй вариант, если вам не нужен другой вид внутри вашего контроллера. Кроме того, я должен отметить, что вы пропускаете как UIView, так и UIWebView в приведенном выше фрагменте кода. Это может быть упрощено, но если это не так, вы должны освободить представления после их назначения. Вот пример реализации решения 2 выше:

- (void) loadView
{
    webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    webView.delegate = self;    // weak reference: doesn't retain self
    self.view = webView;        // strong reference: retains webView
    [webView release];          // release initial reference: now 'owned' through self.view
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...