gpt4 book ai didi

iphone - 为什么我的应用内浏览器没有加载?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:52:01 25 4
gpt4 key购买 nike

我想创建一个自定义应用内浏览器以在我的应用中显示它。

我的架构看起来像这样:UIViewController 的子类:uiviewcon从它的 Nib 加载:

  • UIWebView
  • 带有 UI 元素的顶部和底部栏,例如前进、后退......

在我实例化 uiviewcon 之后,我在其上调用以下方法:

-(void)loadrequest:(NSURLRequest *)urlrequest{
[webView loadRequest:urlrequest];
}

webview 是我 Nib 中 UIWebView 的 IBOutlet。然而,webView 似乎是 nil(我通过 if(webView)... 检查过,而且我肯定已经在 IB 中连接了它)

我的 webView 没有被分配的可能原因是什么?我已经在 uiviewcon 中实现了 UIWebViewDelegate 协议(protocol)的一些方法(在 uiviewcon 的 viewDidLoad 中将自己设置为委托(delegate)),但是这些方法都没有被调用(似乎是合理的,因为 webView 是 nil)。

我怎样才能改进我的代码,以便我的浏览器最终加载一些东西?

编辑:我的 uiviewcon header :

@protocol CustomWebViewDelegate
-(void)hidecustomwebview;
@end

@interface CustomWebView : UIViewController<UIWebViewDelegate> {
UIActivityIndicatorView *spinner;
UIWebView *webView;
}
@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *spinner;
@property (nonatomic, retain) IBOutlet UIWebView *webView;
@property (nonatomic,assign) id <CustomWebViewDelegate>delegate;
-(void)webViewDidStartLoad:(UIWebView *)webView;
-(void)webViewDidFinishLoad:(UIWebView *)webView;
-(void)loadrequest:(NSURLRequest *) urlrequest;
-(IBAction)hideme;
@end

最佳答案

您的 View 元素仅在需要时实例化。这意味着第一次引用 Controller 的 view 属性(在 UIKit 内部或代码中任何地方对“self.view”的引用)会触发实际创建所有元素的过程 Nib 。

因此,在上述过程发生之前,您的 webView 属性将为 nil。您很可能在实例化 View 之前调用了 loadRequest。您的问题的解决方案是在调用 loadRequest 时简单地进行更改。

那么调用 loadRequest 的正确时间是什么时候?存在三种可能:

1) 如果您从 CustomWebView 内部调用 loadRequest,您可以将该代码放入 viewDidLoad

2) 如果您必须从 CustomWebView 外部调用 loadRequest,您可以等待第一次显示该 Controller (比如使用 presentModalViewController:animated: 或将您的 Controller 推到导航上堆栈),然后调用 loadRequest。

所以你的代码看起来像这样:

NSURLRequest *someRequest = nil; //Assume this has some valid value

CustomWebView *myWebView = [[CustomWebView alloc] init]; //Plus other nib niceties
[self presentModalViewController:myWebView];
[myWebView loadRequest:someRequest]; //View has been created,
//loadRequest will work.

而不是原来的样子:

NSURLRequest *someRequest = nil; //Assume this has some valid value

CustomWebView *myWebView = [[CustomWebView alloc] init]; //Plus other nib niceties
[myWebView loadRequest:someRequest]; //Your view is not created yet, loadRequest won't work.
[self presentModalViewController:myWebView];

3) 如果您不能执行上述操作,并且无论您何时选择 presentModalViewControllerpushViewController,都必须能够在任何时间调用 loadRequest,则总是一个挽救一天的技巧:)

黑客是,只需在 CustomWebView 的 init 方法中引用 self.view,您就可以确信 View 已在“init”后立即设置。您如何引用 self.view 并不重要,即使像 [self.view setNeedsLayout] 也可以。就像我说的,没关系。

这是一个相当简单的问题,但我想在这里列出所有选项,因为这是我过去常犯的一个相当常见的错误。

关于iphone - 为什么我的应用内浏览器没有加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6198778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com