【问题标题】:UIWebViewDelegate functions have not been calledUIWebViewDelegate 函数尚未被调用
【发布时间】:2012-12-13 11:56:04
【问题描述】:

.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这句话。

谢谢回答我的人。我确实从你的回答中学到了。

【问题讨论】:

    标签: objective-c ios uiwebview asihttprequest uiwebviewdelegate


    【解决方案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...]; }
    

    【讨论】:

    • 谢谢 Daij-Djan。我也认为它可能与内存管理属性有关。我确实这样做了:[self.view addSubview:myView.view];已经。最后,我发现 UIWebViewDelegate 没有被调用,因为我输入了 myView = nil;在我添加 myView.view 作为 self.view 的子视图之后。无论如何,谢谢所有回答我的人!
    • 顺便说一句,我在这里提出了另一个广泛的问题。我希望你也可以看看。谢谢!
    【解决方案2】:

    MyView 是一个视图控制器。在第二种情况下,您将其视为视图。如果你想直接添加一个视图控制器的视图,它不会调用所有的视图控制器方法。为了能够获得正确的功能,您必须做一些不同的事情。

    假设您在另一个视图控制器中,然后在另一个视图控制器中,当您想要添加 MyView 视图控制器的视图时,请执行以下操作

    [self addChildViewController:myView];
    [self.view addSubview:myView.view];
    [myView didMoveToParentViewController:self];
    

    但在此之前,请使用正确的命名约定。如果您将 UIViewController 的子类命名为 MyView,您会感到困惑。将其命名为 MyViewController。这样,您将能够更好地跟踪内容。

    阅读更多关于视图控制器包含问题的信息。

    【讨论】:

    • 抱歉,在这里输入错误。我确实这样做了:[self.view addSubView:myView.view];并且程序中没有错误或警告。
    • 它不会给你警告,因为你所做的并没有错。但请记住,您只是在当前视图中添加一个视图。视图只是前端。 View 不会知道它所属的视图控制器中的方法。 Viewcontroller 知道它的视图。 View 不一定知道它的视图控制器。这就是原因,您将看到添加的视图,但如果您单击视图上的按钮等,则不会发生任何事情。
    • 如果我创建 MyView,它是另一个 UIViewController 中的 UIViewController,就像我输入的一样。 UIWebViewDelegate 的函数可以正常调用。但是,如果我使用 AsiHttpRequest 并调用一个在回调后创建 MyView 的函数。 MyView 可以被调用和初始化,但是 UIWebViewDelegate 的函数不能被调用。这就是我遇到的问题。
    • 抱歉让您误会了。无论如何,谢谢你的好意回复。我仍然希望有人可以帮助我:)
    • @Srikanth 你可以添加一个 VC 的观点 ok.. 你需要保留 VC 并且他不做什么。
    猜你喜欢
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    相关资源
    最近更新 更多