«Предварительная загрузка» HTML для UIWebView и передача его на новый контроллер - PullRequest
0 голосов
/ 23 декабря 2009

У меня есть приложение на основе навигации с 2 UIViewControllers (контроллер-2 помещается на контроллер-1, когда пользователь выбирает конкретную строку в UITableView, отображаемом с помощью контроллера-1).

Вот'twist' … Когда контроллер-1 загружен, я хочу «предварительно извлечь» URL, содержащий HTML / javascript, в UIWebView .Изначально пользователь не увидит этот UIWebView.Вместо этого они увидят UITableView, позволяющий им щелкнуть по 5 различным параметрам (row0, row1, row2, row3, row4).

Когда пользователь выбирает строку, я хотел бы поместить новое представление в стек и «передать» HTML / Javascript в UIWebView, расположенный в этом новом представлении, и отобразить веб-страница в новом представлении.

Возможно ли передать UIWebView следующим образом?

Я пробовал следующее, которое не отображает HTML в UIWebView, поэтому любые предложения о том, как передать UIWebView (или альтернативы) было бы здорово.Я почти уверен, что установил правильные соединения в моем nib-файле для controller2.

Чтобы объяснить мои мотивы.Я хочу использовать JavaScript, чтобы скрыть определенные элементы веб-страницы в зависимости от того, какую строку нажимает пользователь.Для меня это быстрее и проще сделать 1 URL-запрос, а затем использовать javascript, чтобы скрыть различные элементы HTML, чем сделать 5 различных URL-запросов, получая 5 отдельных веб-страниц.Так что, если у этого подхода есть альтернативные мысли, это тоже было бы здорово.Я думал о том, чтобы сделать все это в пределах одного viewcontroller (добавление и удаление подпредставлений), но я бы предпочел перейти к новому представлению, чтобы использовать преимущества контроллера навигации.

TYVM !!!!

////////// controller 1 //////////////////////

- (void)viewWillAppear:(BOOL)animated {
  // do other stuff ///
  NSURLRequest    *request_object = [NSURLRequest requestWithURL:self.url];
  [self.web_view1 loadRequest:request_object];         
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    self.view_controller2             = [[[ViewController2 alloc]   initWithNibName:@"ViewController2" bundle:nil] autorelease];
    self.view_controller2.web_view2   = self.web_view1;
    [self.navigationController        pushViewController:self.view_controller2 animated:YES];
}
//////////// controller 1 //////////////////////

//

///////////// portion of controller 2 header file /////////////////////////

@interface ViewController2 : UIViewController {
    IBOutlet UIWebView *web_view2;
}
@property (nonatomic, retain) IBOutlet UIWebView *web_view2;


//////////// portion of controller 2 implementation file //////////////
#import "ViewController2.h"

@implementation ViewController2
@synthesize web_view2;

- (void)dealloc {
    [web_view2 release], web_view2 = nil;
    [super dealloc];
}

//////////// controller 2 //////////////////////////

1 Ответ

1 голос
/ 23 декабря 2009

У вас правильная идея, но вам нужно сделать еще одну вещь. В вашем -tableView: didSelectRowAtIndexPath :. вам нужно добавить веб-представление в представление viewController, а не просто назначить его розетке. Следующие могут работать, в зависимости от ваших файлов XIB:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  self.view_controller2 = [[[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil] autorelease];
  self.web_view1.frame = self.view_controller2.web_view2.frame;
  [self.view_controller2.web_view2 removeFromSuperview];
  self.view_controller2.web_view2 = self.web_view1;
  [self.view_controller2.view addSubview: self.web_view1];
  [self.navigationController pushViewController:self.view_controller2 animated:YES];
}

Предполагается, что web_view2 является допустимым и подключенным выходом, содержащим веб-просмотр в том месте, где вы хотите, чтобы ваш «кэшированный» просмотр был.

...