UiWebView委托方法没有被调用 [英] UiWebView delegate methods not getting called

查看:42
本文介绍了UiWebView委托方法没有被调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在webView中播放youtube嵌入式视频,当我未设置委托时会播放该视频,如果我设置了委托视频,则不会加载,并且也不会调用委托方法.这是我的代码:

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类

#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:和其他人委托方法不被调用,甚至嵌入式代码也不能加载到webview中?

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)请确保在当前的班级视图或任何顶视图上添加Web视图.

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

2)您是否要在情节提要中添加viewSelf?因为我无法以编程方式看到它.确保已完成,因为您要将Web视图添加到viewSelf.

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)在hideControllers中,您隐藏了一些topView.确保它不是当前类topView.

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

希望这会有所帮助.

这篇关于UiWebView委托方法没有被调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆