UiWebView委托方法没有被调用

我试图播放youtubeembedded的video在webView它播放时,我不设置委托,如果我设置委托videodosen't加载和委托方法也没有得到调用。 这是我的代码:

.m类

#import "EmbeddedVideoVC.h" @interface EmbeddedVideoVC (){ MBProgressHUD *hud; } //@property (weak, nonatomic) IBOutlet UIWebView *webView; @property (weak, nonatomic) IBOutlet UIView *viewSelf; @property (strong, nonatomic) NSTimer *controllersTimer; @property (assign, nonatomic) NSInteger controllersTimeoutPeriod; @end @implementation EmbeddedVideoVC - (void)viewDidLoad { [super viewDidLoad]; self.view.transform = CGAffineTransformMakeRotation(M_PI/2); } -(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; CGRect bounds = [[UIScreen mainScreen] bounds]; if ([SharedAppManager sharedInstance].applicationFrame.size.height < 568) { bounds = CGRectMake(0, 0, 480, 320); } _videoWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0,bounds.size.height, bounds.size.width)]; [_videoWebView setAllowsInlineMediaPlayback:YES]; [_videoWebView setMediaPlaybackRequiresUserAction:NO]; [self.viewSelf addSubview:_videoWebView]; hud = [MBProgressHUD showHUDAddedTo:_videoWebView animated:YES]; hud.color = [UIColor clearColor]; hud.activityIndicatorColor = [UIColor whiteColor]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapMethod)]; [tap setNumberOfTapsRequired:1]; // Set your own number here [tap setDelegate:self]; // Add the <UIGestureRecognizerDelegate> protocol [_videoWebView addGestureRecognizer:tap]; _videoWebView.delegate= self; [_videoWebView loadHTMLString:self.embeddedCode baseURL:nil]; [self hideControllers]; } -(void)didTapMethod{ //Showing Controls } #pragma mark - WEBVIEW DELEGATES - (void)webViewDidStartLoad:(UIWebView *)webView{ [MBProgressHUD hideHUDForView:self.videoWebView animated:YES]; } - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { [MBProgressHUD hideHUDForView:self.videoWebView animated:YES]; } -(void)webViewDidFinishLoad:(UIWebView *)webView { [MBProgressHUD hideHUDForView:self.videoWebView animated:YES]; } - (BOOL)prefersStatusBarHidden { return YES; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } -(void)hideControllers { [UIView animateWithDuration:0.5f animations:^{ dispatch_async(dispatch_get_main_queue(), ^{ topView.hidden= YES; }); } completion:^(BOOL finished){ }]; } -(void) showControles { } @end 

.h类

 #import "MusicParentVC.h" @interface EmbeddedVideoVC : MusicParentVC <UIGestureRecognizerDelegate, UIWebViewDelegate> @property (strong, nonatomic) NSString *embeddedCode; @property (nonatomic, strong) UIWebView *videoWebView; @end 

任何人都可以告诉我什么是问题,为什么webViewDidFinishLoad:和其他委托方法没有被调用,甚至embedded的代码不加载在webview中?

只要把你的UIWebView相关代码放在viewDidAppear:方法中。

参考: https : //stackoverflow.com/a/27647327/2284065

1)请确保您在当前课程视图或任何顶视图上添加Web视图。

2)你是否在storyboard中joinviewSelf? 因为我不能以编程方式看到它。 确保它,因为你正在添加Web视图来查看自己。

3)在hideControllers你隐藏了一些topView。 确保它不是现在的类topView。

这里是我工作的代码(委托方法也在调用),

 _videoWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0,self.view.frame.size.width, self.view.frame.size.height)]; [_videoWebView setAllowsInlineMediaPlayback:YES]; [_videoWebView setMediaPlaybackRequiresUserAction:NO]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapMethod)]; [tap setNumberOfTapsRequired:1]; // Set your own number here [tap setDelegate:self]; // Add the <UIGestureRecognizerDelegate> protocol [_videoWebView addGestureRecognizer:tap]; _videoWebView.delegate= self; NSURL *nsurl=[NSURL URLWithString:@"http://www.google.com"]; NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl]; [_videoWebView loadRequest:nsrequest]; [self.view addSubview:_videoWebView]; 

希望这可以帮助。