.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;
}在另一个MyView中创建ViewController:
MyView * myView = [[MyView alloc] init];
[self.view addSubView:myView.view];
myView = nil;myView设置为零,因此它的委托也被销毁。
为了解决这个问题,删除了myView = nil.的句子。
谢谢你们回答我。我从你的回答中学到了。
发布于 2012-12-13 16:00:32
正如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...]; }发布于 2012-12-13 12:08:10
MyView是一个视图控制器。在第二种情况下,你把它当作一个视图。如果要直接添加视图控制器的视图,它将不会获得调用的所有视图控制器方法。为了能够获得正确的功能,您必须做一些不同的事情。
假设您在另一个视图控制器中,然后在另一个视图控制器中,当您想要添加MyView视图控制器的视图时,请执行以下操作
[self addChildViewController:myView];
[self.view addSubview:myView.view];
[myView didMoveToParentViewController:self];但即使在这样做之前,请使用正确的命名约定。如果要将UIViewController的子类命名为MyView,则会使自己感到困惑。把它命名为MyViewController。这样,你就能更好地记录东西。
了解更多关于针对您的问题的视图控制器包含的信息。
https://stackoverflow.com/questions/13859326
复制相似问题