.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。
的句子 谢谢那些回答我的人。我确实从你的答案中学到了。答案 0 :(得分:1)
正如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...]; }
答案 1 :(得分:0)
MyView是一个视图控制器。在第二种情况下,你将它视为一种观点。如果要直接添加视图控制器的视图,则不会获取所有调用的视图控制器方法。为了能够获得正确的功能,您将不得不做一些不同的事情。
假设您在另一个视图控制器中,然后在另一个视图控制器中,当您想要添加MyView视图控制器的视图时,请执行以下操作
[self addChildViewController:myView];
[self.view addSubview:myView.view];
[myView didMoveToParentViewController:self];
但即使在此之前,请使用正确的命名约定。如果您将UIViewController的子类命名为MyView,您将会感到困惑。将其命名为MyViewController。这样,您就能更好地跟踪内容。
详细了解您的问题的视图控制器控制。