UiWebView delegate methods not getting called

爱⌒轻易说出口 提交于 2020-01-04 08:21:09

问题


I am trying to play youtube embedded video in webView it plays when i don't set delegate and If i set delegate video dosen't load and delegates methods are also not getting called. Here is MY Code:

.m class

#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 class

#import "MusicParentVC.h"

@interface EmbeddedVideoVC : MusicParentVC <UIGestureRecognizerDelegate, UIWebViewDelegate>

@property (strong, nonatomic)  NSString *embeddedCode;
@property (nonatomic, strong) UIWebView *videoWebView;
@end

CAN ANYONE tell me what is the problem and why webViewDidFinishLoad: and others delegates methods not getting called and even embedded code not loading in webview?


回答1:


Just put your UIWebView related code in viewDidAppear: method.

Reference : https://stackoverflow.com/a/27647327/2284065




回答2:


1) Please make sure you are adding web view on present class view or on any top view.

2) Are you adding viewSelf in storyboard? since i cannot see it programmatically. Make sure of it, because you are adding web view to viewSelf.

3) In hideControllers you are hiding some topView. Make sure it is not the present class topView.

Here is the code working for me (delegate methods are also calling),

_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];

Hope this helps.



来源:https://stackoverflow.com/questions/41219916/uiwebview-delegate-methods-not-getting-called

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!