[英]UIWebViewDelegate: webViewDidFinishLoad not called during in-page navigation
[英]UIWebViewDelegate functions have not been called
.h文件:
@interface MyView: UIViewController <UIWebViewDelegate> {
UIWebView *webView;
}
.m文件:
-(void)viewDidLoad {
CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
webView= [[UIWebView alloc] initWithFrame:webFrame];
webView.delegate = self;
[self.view addSubview:webView];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]]];
}
-(void)webViewDidStartLoad:(UIWebView *)webView {
NSLog(@"start");
}
-(void)webViewDidFinishLoad:(UIWebView *)webView {
NSLog(@"finish");
}
-(void)dealloc {
webView.delegate = nil;
webView = nil;
}
在另一個ViewController中創建MyView:
MyView * myView = [[MyView alloc] init];
[self.view addSubView:myView.view];
myView = nil;
myView設置為nil,因此其委托也被銷毀。
要解決此問題,請刪除myView = nil的句子。
謝謝回答我的家伙。 我確實從你的答案中學到了。
正如srikanth所說,myview是一個控制器,需要在屏幕上告知它並保留它,這樣它才不會消失,這是您所遇到的實際問題 (我認為)。 沒有人保留myView。 使它成為成員變量,這樣在給出視圖后就不會立即釋放它:)。
@interface MyCallerWithDoesTheASI : NSObject {
MyView *myView;
}
@end
或正確執行並添加它, 如srikanth說 ::
[self addChildViewController:myView];
[self.view addSubview:myView.view];
[myView didMoveToParentViewController:self];
或者例如,展示myView模態
[self presentViewController:myView animated:NO completion:^{ [[myView dismiss...]; }
MyView是一個視圖控制器。 在第二種情況下,您將其視為視圖。 如果要直接添加視圖控制器的視圖,則不會獲得所有調用的視圖控制器方法。 為了獲得正確的功能,您將不得不做一些不同的事情。
假設您位於另一個視圖控制器中,然后又位於另一個視圖控制器中,那么當您想添加MyView視圖控制器的視圖時,請執行以下操作
[self addChildViewController:myView];
[self.view addSubview:myView.view];
[myView didMoveToParentViewController:self];
但即使在此之前,請使用正確的命名約定。 如果將UIViewController的子類命名為MyView,則會使自己感到困惑。 將其命名為MyViewController。 這樣,您將能夠更好地跟蹤事物。
閱讀有關您的問題的視圖控制器包含的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.