YHExplorerView.m 3.34 KB
//
//  YHExplorerView.m
//  YohoExplorerDemo
//
//  Created by gaoqiang xu on 3/2/15.
//  Copyright (c) 2015 gaoqiang xu. All rights reserved.
//

#import "YHExplorerView.h"

@interface YHExplorerView ()
@property (strong, nonatomic) YHExplorerViewController *webViewController;
@property (strong, nonatomic) NSString *url;
@property (assign, nonatomic) BOOL isLoaded;

@end

@implementation YHExplorerView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.isLoaded = NO;
    }
    
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.isLoaded = NO;
    }
    
    return self;
}

- (void)setUrl:(NSString *)url
{
    _url = url.length>0?[url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]:url;
}

- (void)didMoveToSuperview
{
    if (!self.superview) {
        return;
    }
}

- (void)didMoveToWindow
{
    if (!self.window) {
        return;
    }
    
    if (!self.isLoaded) {
        [self addSubview:self.webViewController.view];
        self.isLoaded = YES;
        if (self.url.length > 0) {
            [self.webViewController loadWebUrl:self.url];
        }
    }
}

- (void)layoutSubviews
{
    [super layoutSubviews];
    
    if (self.isLoaded) {
        self.webViewController.view.frame = self.bounds;
    }
}

#pragma mark - Public
- (void)loadWebUrl:(NSString *)url
{
    self.url = url;
    if (self.isLoaded) {
        [self.webViewController loadWebUrl:self.url];
    }
}

- (void)loadHTMLString:(NSString *)html
{
    if (self.isLoaded) {
        [self.webViewController loadHTMLString:html];
    }
}

- (void)setProgressBarColor:(UIColor *)color
{
    [self.webViewController setProgressBarColor:color];
}

#pragma mark - Override Setter & Getter
- (YHExplorerViewController *)webViewController
{
    if (!_webViewController) {
        _webViewController = [[YHExplorerViewController alloc] init];
    }
    return _webViewController;
}

- (UIWebView *)webView
{
    return self.webViewController.webView;
}

- (void)setDelegate:(id<YHExplorerDelegate>)delegate
{
    self.webViewController.delegate = delegate;
}

- (id<YHExplorerDelegate>)delegate
{
    return self.webViewController.delegate;
}

- (void)setEnableProgressBar:(BOOL)enableProgressBar
{
    self.webViewController.progressBarEnabled = enableProgressBar;
}

- (BOOL)enableProgressBar
{
    return self.webViewController.progressBarEnabled;
}

#pragma mark - Method Forwarding
- (BOOL)respondsToSelector:(SEL)aSelector
{
    if ([super respondsToSelector:aSelector]) {
        return YES;
    }
    
    if ([self.webViewController respondsToSelector:aSelector]) {
        return YES;
    }
    
    return NO;
}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
{
    NSMethodSignature *signature = [super methodSignatureForSelector:aSelector];
    if (!signature) {
        if (self.webViewController && [self.webViewController respondsToSelector:aSelector]) {
            return [(NSObject *)self.webViewController methodSignatureForSelector:aSelector];
        }
    }
    
    return signature;
}

- (void)forwardInvocation:(NSInvocation *)anInvocation
{
    if (self.webViewController && [self.webViewController respondsToSelector:[anInvocation selector]]) {
        [anInvocation invokeWithTarget:self.webViewController];
    }
}

@end