2009-05-28 2 views
1

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

- (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.

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

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

ответ

3

Есть две вещи, чтобы посмотреть в здесь:

  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 
} 
+0

Спасибо за комментарий. Я не всегда уверен, должен ли я освободить экземпляр внутри метода, где он создан, или в методе dealloc класса. – Georges

Смежные вопросы