簡體   English   中英

沒有調用UIWebViewDelegate函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM