#☆☆☆ JGWebView ☆☆☆
// 初始化引擎
JGWebViewEngine *engine = [JGWebViewEngine shareWebViewEngineWithType:JGWebViewTypeForUIWebView];
// 获取webView的工厂
id <JGWebViewFactory> factory = [engine getWebViewFactory];
// 拿到webView虚拟对象
id <JGWebView> webView = [factory getWebViewWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height - 64)];
// webView的代理
[webView setDelegate:self];
// 通过webView的虚拟对象,将webView添加到self.view上
[self.view addSubview:[webView getView]];
// 加载
[webView loadURLString:@"https://www.baidu.com"];
在直接使用JGWebView时,使用+shareWebViewEngineWithType: 方法直接初始化webView引擎,这样可以直观决定使用UIWebView还是WKWebView。如果非此方法创建的JGWebView,都默认创建UIWebView
// 如果不想开类,完全可以使用下面的方式进行操作,代理方法也可以直接写在这个类中
JGWebViewController *webVC = [[JGWebViewController alloc] initWithWebViewEngineWithType:JGWebViewTypeForUIWebView];
[ui_webVC loadURLString:@"https:www.baidu.com"];
// 如果需要监听代理,也可以直接将JGWebViewController所提供的代理方法拉到使用JGWebViewController的当前类去实现
webVC.delegate = self;
[self.navigationController pushViewController:webVC animated:YES];
#pragma mark ---- 创建
// 在webVC入口的地方,创建JGWebViewController的子类,主要代码如下:
JGUIWebViewController *webVC = [[JGUIWebViewController alloc] initWithWebViewEngineWithType:JGWebViewTypeForUIWebView];
// 如果这里不做URL加载,也可以在子类中进行加载
[webVC loadURLString:@"https://www.baidu.com"];
[self.navigationController pushViewController:webVC animated:YES];
#pragma mark ---- 子类中具体实现
- (void)viewDidLoad {
[super viewDidLoad];
// 加载URL
[self loadURLString:@"https://www.baidu.com"];
}
- 基类提供了构造方法-initWithWebViewEngineWithType:,在构造时决定了JGWebView的加载方式
- 使用基类的方式中,第一种使用较为简便,第二种方式是为了在不满足个人需求时,扩展自己的功能效果
☆ 代理方法:在JGWebView中,提供了基本(常见使用)代理方法***WebViewDelegate***,以及根据个人需求拓展的代理方法***JGWebViewUIDelegate***。如果不满足现有需要,可以参考原有代理方法的实现方式进行拓展
/// 将要开始加载
- (BOOL)webView:(id<JGWebView>)webView shouldStartLoadWithRequest:(NSURLRequest *)request;
/// 正在加载
- (void)webViewDidStartLoad:(id<JGWebView>)webView;
/// 加载完成
- (void)webViewDidFinishLoad:(id<JGWebView>)webView;
/// 获取当前加载的网页标题
- (void)webView:(id<JGWebView>)webView getHtmlTitle:(NSString *)title;
/// 获取当前加载的网页内容
- (void)webView:(id<JGWebView>)webView getHtmlContent:(NSString *)content;
/// 加载失败
- (void)webView:(id<JGWebView>)webView didFailLoadWithError:(NSError *)error;
/// 点击工具栏中的分享按钮
- (void)didClickToolBarForShareItemWithWebView:(id<JGWebView>)webView;
/// webView关闭
- (void)webViewDidClose:(id<JGWebView>)webView;
/// 用户用足够的力触摸来弹出视图控制器,此方法将被调用。此时,你可以选择在app中展示弹出的视图控制器
- (void)webView:(id<JGWebView>)webView commitPreviewingViewController:(UIViewController *)previewingViewController;
// ---------> 还有很多代理方法,按照需要拓展 ......
在每个代理方法中,都返回了JGWebView这个虚拟的webView对象,方便在使用的过程中直接使用。例如需要获取具体的webView,可以通过***[webView getWebView];***的方式进行获取
相关属性详解:在使用JGWebView的过程中,提供了许多外部配置方法,可以根据需要进行相应配置
对JGWebView的相关配置都集中在JGWebView类中,具体实现过程可以查看相关实现
/// 获取到webView的父视图(跟视图),在做添加视图的时候,一定要调用这个方法添加到想要的视,如[<UIView> addSubview:[外部webView的对象调用这个方法 getView]];
- (UIView *)getView;
/// 获取实际上的webView,如果想要获取到实际上的webView,就要调用这个方法
- (UIView *)getWebView;
/// 设置代理,设置了之后代理方法就会调用,不设置代理的情况下,也不会加载代理方法
- (void)setDelegate:(id<JGWebViewDelegate>)delegate;
/// 此代理是为了WKWebView拓展的,如果不需要或者是使用UIWebView时,可以不调用次方法
- (void)setUIDelegate:(id<JGWebViewUIDelegate>)ui_delegate;
/// 使用WebView加载NSURLRequest的形式
- (void)loadRequest:(NSURLRequest *)request;
/// 使用WebView加载URL的形式
- (void)loadURL:(NSURL *)URL;
/// 使用WebView加载URLString的形式
- (void)loadURLString:(NSString *)URLString;
/// 使用WebView加载HTMLString的形式
- (void)loadHTMLString:(NSString *)HTMLString;
/// 返回上一页
- (void)goBack;
/// 前往下一页
- (void)goForward;
/// 刷新当前页
- (void)reLoadCurrentPage;
/// 关闭webView,如果不实现的情况下,默认是优先pop出栈,pop不行就考虑dismis下模态
- (void)closeWebViewWithCloseBlock:(JGCloseBlock)cBlock;
/// 是否需要工具条 默认是YES,带工具条的
- (void)isNeedToolBar:(BOOL)isNeed;
///设置工具条的高度 默认60
- (void)setToolBarForHeight:(CGFloat)height;
/// 自定义工具条,如果自定义了工具条,一定要设置bounds
- (void)setCustomToolBar:(UIView *)toolBar;
/// 是否要使用附带的loadingView 如果设置了这个属性后,下面loadingView的基本配置的方法就不需要管了
- (void)isOpenLoadingView:(BOOL)isOpenLoadingView;
/// 设置LoadingView的风格
- (void)setLoadingViewStyle:(JGLoadingStyle)style;
///设置线条的高度 默认5
- (void)setLineWidth:(CGFloat)lineWidth;
/// 设置线条的颜色,默认红色
- (void)setLineColor:(UIColor *)lineColor;
/// 是否是异步加载圈还是同步加载圈,同步的意思就是在加载的时候是否支持点击,反之异步就是说一遍加载可以一遍做其他的操作,比如点击其他的按钮
- (void)setIsAsyncLoading:(BOOL)isAsync;
/// 设置加载圈圈的大小,默认是50, line类型的加载无关
- (void)setRoundWidth:(CGFloat)roundWidth;
JGLoadingView: 1、是内部封装的,也向外部提供了很多相关的自定义方法,如果不想要或者是不使用可以直接调用关闭的方法进行关闭、移除; 2、目前暂时不提供外部直接将自定义的JGLoadingView套到JGWebView中,所以如果是自己的自定义loading,可以根据内部的JGLoadingView的集成使用方式进行集成; 3、虽然JGLoadingView是集成到JGWebView中,但是相对来说也是可以独立使用的,这里就不提具体的单独使用方式,详细自己去阅读demo即可。
JGWebViewToolBar: 1、内部附带封装的,同时提供很多JGWebViewToolBar的方法给外部相关配置,具体详细阅读JGWebView即可,如果不需要的情况下,请调用关闭的方法关闭工具栏; 2、支持自定义,只要将你自定义的toolBar套到JGWebView的**-setCustomToolBar:方法里面,就可以完全实现自定义了,不过具体的控制过程,参照demo中的JGCustomToolBarVC**这个类。
1、小弟初习虚拟工厂模式,很多地方没有把握好,据了解、目前webView的例子应用很广,所以根据目前自习的效果,详细设计了一套在系统WKWebView和UIWebView的基础上集成的一套无偶的JGWebView提供大家参考和使用 2、代码中提供了详细的中文注释,方便大家理解。 3、在使用的过程中,如果发现了问题,或者有更好的功能拓展、想法可以直接发邮件到[email protected],本人会第一时间给予回复。