UIViewControllers и UIWebView - PullRequest
       15

UIViewControllers и UIWebView

0 голосов
/ 30 августа 2009

Я новичок в разработке для iPhone, и у меня возник вопрос, который может помочь понять эту концепцию в целом.

По сути, у меня есть UIViewController, который загружает вид с кучей вещей. Теперь я хочу, чтобы пользователь нажимал на кнопку, чтобы загрузить другое представление, которое оказывается веб-представлением. Теперь я хочу, чтобы weview загружал другой URL в зависимости от того, какая кнопка была нажата в исходном представлении.

как мне это сделать? В основном, в своей голове я думал, что смогу загрузить и поменять местами представления при нажатии кнопки, вот так:

В

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *selectedLink = [valuesForSection objectAtIndex:row];

    NSString *urlAddress = @"http://www.google.com";

    //Create a URL object.
    NSURL *url = [NSURL URLWithString:urlAddress];

    //URL Requst Object
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    //Load the request in the UIWebView.
    [webView loadRequest:requestObj];

    [self.view removeFromSuperview];
    [self.view insertSubview:webView atIndex:0];
}

Это правильный способ сделать это? Или как мне это сделать?

1 Ответ

1 голос
/ 30 августа 2009

Так бы я поступил, да. Создайте один UIWebView и, в зависимости от того, какая ячейка выбрана, загрузите NSURLRequest в представление, используя loadRequest:. Он обладает тем преимуществом, что не требует создания отдельных веб-представлений для каждой ячейки и является асинхронным.

Однако я не обязательно удаляю self.view из его суперпредставления всякий раз, когда по ячейке щелкают; скорее, я бы вызвал либо модальный контроллер представления (presentModalViewController:animated:) с веб-представлением в качестве его представления, либо я вставил бы новый контроллер в стек контроллера навигации (pushViewController:animated:). Это более плавный переход и будет выглядеть лучше для пользователя.

Редактировать (в ответ на комментарий): Да, лучше иметь другой контроллер, чем просто менять представления. Выполнение removeFromSuperview и addSubview: сохраняет оба представления в одном и том же контроллере, но в результате вам будет сложнее управлять вашим кодом (один контроллер будет иметь дело с двумя представлениями) и ухудшится взаимодействие с пользователем (перехода нет, как встроенный с навигационным контроллером push).

Чтобы правильно выполнить толчок, вы должны:

  • Создание контроллера навигации для существующего контроллера представления
  • Когда вам нужно, создайте новый экземпляр UIViewController с его видом, установленным на UIWebView, который вы создаете и загружаете с вашим HTML
  • Вставьте новый контроллер вида в стек контроллера навигации со старого контроллера вида, вызвав:
[self.navigationController pushViewController:newViewController animated:YES];
...