【问题标题】:"prefetch" HTML for UIWebView and pass it to a new controllerUIWebView 的“预取”HTML 并将其传递给新控制器
【发布时间】:2009-12-23 04:05:00
【问题描述】:

我有一个带有 2 个 UIViewControllers 的基于导航的应用程序(当用户选择使用 controller-1 显示的 UITableView 中的特定行时,controller-2 被推送到 controller-1 上)。

这里是“扭曲”...当控制器 1 加载时,我想将包含 HTML/javascript 的 URL“预取”到 UIWebView 中。最初,用户不会看到这个 UIWebView。相反,他们会看到一个 UITableView,允许他们点击 5 个不同的选项(row0、row1、row2、row3、row4)。

当用户选择一行时,我想将一个新视图推送到堆栈上并将 HTML/Javascript “传递” 到位于该新视图中的 UIWebView,并显示网页在新视图中。

UIWebView可以这样传吗?

我尝试了以下方法,它没有在 UIWebView 中显示 HTML,因此任何关于如何传递 UIWebView(或替代方法)的建议都会很棒。我很确定我在我的 nib 文件中为 controller2 建立了正确的连接。

解释我的动机。我想使用 javascript 来隐藏网页的某些元素,具体取决于用户单击的行。对我来说,发出 1 个 URL 请求然后使用 javascript 隐藏各种 HTML 元素比发出 5 个不同的 URL 请求、获取 5 个单独的网页更快、更容易。因此,如果对这种方法有其他想法,那也很棒。我曾考虑在 1 个视图控制器中完成所有这些操作(添加和删除子视图),但我宁愿推入一个新视图以利用导航控制器。

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 //////////////////////////

【问题讨论】:

    标签: iphone objective-c iphone-sdk-3.0 uiwebview uinavigationcontroller


    【解决方案1】:

    你的想法是对的,但你还需要做另一件事。在您的 -tableView:didSelectRowAtIndexPath:.您需要将 webview 添加到 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 是一个有效且已连接的插座,在您希望“缓存”视图所在的位置包含一个 webview。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多