封装 MBProgressHud

====================================
#import "MBProgressHUD.h" @interface MBProgressHUD (Add)
+ (void)showError:(NSString *)error toView:(UIView *)view; + (MBProgressHUD *)showMessag:(NSString *)message toView:(UIView *)view;
@end ============================
#import "MBProgressHUD+Add.h" @implementation MBProgressHUD (Add)
#pragma mark 显示错误信息
+ (void)showError:(NSString *)error toView:(UIView *)view{
// 快速显示一个提示信息
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES];
hud.labelText = error;
// 设置图片
hud.customView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"alert_failed_icon.png"]] autorelease];
// 再设置模式
hud.mode = MBProgressHUDModeCustomView; // 隐藏时候从父控件中移除
hud.removeFromSuperViewOnHide = YES; // 1秒之后再消失
[hud hide:YES afterDelay:];
} #pragma mark 显示一些信息
+ (MBProgressHUD *)showMessag:(NSString *)message toView:(UIView *)view {
// 快速显示一个提示信息
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES];
hud.labelText = message;
// 隐藏时候从父控件中移除
hud.removeFromSuperViewOnHide = YES; // YES代表需要蒙版效果
//hud.dimBackground = YES; return hud;
}
@end

webview中MBPress的用法

#import "OauthController.h"
#import "MBProgressHUD+Add.h"
#import "WeiboAccount.h"
#import "User.h"
#import "UserMgr.h" @interface OauthController () {
UIWebView *_webView;
}
@end @implementation OauthController #pragma mark - 生命周期方法
- (void)loadView {
CGRect frame = [UIScreen mainScreen].applicationFrame;
_webView = [[[UIWebView alloc] initWithFrame:frame] autorelease];
self.view = _webView;
} - (void)viewDidLoad
{
[super viewDidLoad]; // 授权成功后,会跳到回调地址,并且把access_token拼接到回调地址后面
// reponse_type=token代表授权成功后直接返回access_token
NSString *str = [kOAuthURL stringByAppendingFormat:@"?%@=%@&%@=%@&display=mobile&response_type=token", kClientId, kAppKey, kRedirectURIKey, kRedirectURI]; [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:str]]];
_webView.delegate = self;
} #pragma mark - UIWebView代理方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *url = request.URL.absoluteString;
NSRange range = [url rangeOfString:@"access_token"];
int location = range.location;
// 说明这是含有access_token的回调地址
if (location != NSNotFound) {
// 截取后面的参数字符串
NSString *paramStr = [url substringFromIndex:location];
// 切割所有的参数
NSArray *params = [paramStr componentsSeparatedByString:@"&"]; // access_token=2.00iEK52CsE94CDd31b67b95dEUONIB
// expires_in=157678625
// uid=2148327324 // 初始化账号
WeiboAccount *account = [WeiboAccount account]; // 遍历所有的参数
for (NSString *param in params) {
NSRange tokenRange = [param rangeOfString:kAccessToken];
NSRange expiresRange = [param rangeOfString:kExpiresIn];
NSRange uidRange = [param rangeOfString:KUid]; // 找到了accessToken
if (tokenRange.location != NSNotFound) {
account.accessToken = [param substringFromIndex:tokenRange.location + tokenRange.length + ];
} else if(expiresRange.location != NSNotFound) {
// 找到了expiresIn
account.expiresIn = [[param substringFromIndex:expiresRange.location + expiresRange.length + ] longLongValue]; } else if(uidRange.location != NSNotFound) {
// 找到了uid
account.uid = [param substringFromIndex:uidRange.location + uidRange.length + ];
}
} // 获取用户数据
UserMgr *mgr = [UserMgr mgr];
[mgr queryUserWithUid:account.uid];
mgr.queryUserBlock = ^(User *user, NSString *error) {
// 设置账号昵称
account.screenName = user.screenName; // 将账号写入沙盒
NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [documents stringByAppendingPathComponent:kAccountFile];
[NSKeyedArchiver archiveRootObject:account toFile:path]; [MBProgressHUD hideHUDForView:self.view animated:YES];
// 关闭当前控制器
[self dismissViewControllerAnimated:YES completion:nil];
}; return NO;
}
return YES;
} - (void)webViewDidStartLoad:(UIWebView *)webView {
self.title = kLoadingMsg;
[MBProgressHUD showMessag:kLoadingMsg toView:self.view];
} - (void)webViewDidFinishLoad:(UIWebView *)webView {
self.title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
[MBProgressHUD hideHUDForView:self.view animated:YES];
}
@end

webview中事件的用法的更多相关文章

  1. react.js 从零开始(五)React 中事件的用法

    事件系统   虚拟事件对象 事件处理器将会传入虚拟事件对象的实例,一个对浏览器本地事件的跨浏览器封装.它有和浏览器本地事件相同的属性和方法,包括 stopPropagation() 和 prevent ...

  2. Net中事件的用法之一

    1.事件与委托的关系 委托是一种类型 事件是委托的一个实例 事件中涉及两种角色--事件发布者和事件订阅者. 事件发布者: 触发事件的对象称为事件发布者. 事件订阅者: 捕获事件并对其做出处理的对象称为 ...

  3. Net中事件的用法之二

    1.委托与事件的区别 事件对权限做了控制 1.委托可以直接调用 事件不可以直接调用 2.委托允许外面直接赋值 事件不允许外面直接赋值 2.事件与委托的实例比较 using System; using ...

  4. Android 响应webview中图片的点击事件

    最近碰到个新需求需要点击webview中的图片进行放大显示. 整理了下思路,想到了下面的一个可行的方案. 方案思路, 1.在点击图片的时候调用本地的java方法并给出响应的图片地址 2.本地获得图片地 ...

  5. [转载]js中return的用法

    一.返回控制与函数结果,语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制,无函数结果,语法为:return;  在大多数情况下,为事件处理函 ...

  6. 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图

    [源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...

  7. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  8. webview滑动事件 与内部html左右滑动事件冲突问题的解决办法

    最近在做个混合app , 用html做页面,然后通过webview嵌套在activity中,效果是这样: 开始还是比较顺利,增加了菜单退出按钮,返回键页面回退功能,页面加载显示加载图标(在app端实现 ...

  9. VC++ 浅谈VS2010中CMFCToolBar的用法

    本文将给大家介绍Visual Studio 2010中CMFCToolBar的用法,CMFCToolBar可以让用户自定义工具栏图标,使用静态成员函数SetUserImages()将一个CMFCToo ...

随机推荐

  1. MultipleRegularExpressionAttribute MVC中扩展自定义验证规则

    好久都没有写博客,最近工作中没有什么可写的,公司的项目是以业务为重,技术含量实在不咋的.这次sprint中有一个要求就是password必须一些规则,比如给你一些正则表达式必须满足几个,直接看效果吧 ...

  2. Html.AntiForgeryToken() 防止CSRF攻击 的AJaX应用

    有关Html.AntiForgeryToken()的使用其实网上的说明很多了,比如http://blog.csdn.net/cpytiger/article/details/8781457 那么我们写 ...

  3. External component has thrown an exception

    C#调用c++的DLL报错:External component has thrown an exception, 也没有log产生,怎么回事那? [解决方法] 这是因为c++的程序报错了,而且没有c ...

  4. MAC高效软件必备-落雨

    更新时间:2017年09月19日23:45:29 使用MAC有一年多,最想说的莫过于如何打造一个高效的使用Mac的体验. 1. MAC任务栏管理,窗口切换 1. Mac任务栏管理(类似于Windows ...

  5. thrift系列 - 快速入门

    1.简介           Thrift是当前流行的RPC框架之一,它有强大的代码生成引擎,可以跨语言,轻松解决程序间的通信问题. 本文旨在帮助大家快速入门,若想深入原理,请参见thrift官网:h ...

  6. Solr搭建真实项目

    在经过solr5.4.1 quick start  的学习后.我们要搭建真实的项目了 1.启动项目 bin/solr start 2.创建core bin/solr create -c pms 3.为 ...

  7. 在SpringTest中将Mockito的mock对象通过spring注入使用

    转载:https://blog.csdn.net/m0_38043362/article/details/80111957 1. 原理介绍 通过BeanFactoryPostProcessor向Bea ...

  8. 前端特效: 使用CSS生成的闪光照相机效果

    使用纯CSS生成的照相机效果, 相关CSS代码如下: .container { position: absolute; top: 50%; left: 50%; -webkit-transform: ...

  9. Android 事件模型

    本文内容 基于监听的事件模型 基于回调的事件模型 Android 支持两种事件模型,基于监听的事件模型和基于回调的事件模型. 基于监听的事件模型 基于监听的事件模型是一种委托式的,更"面向对 ...

  10. asp.net时间类-格式-方法应用

    一.当前日期+时间DateTime.Now c#/asp.net通过DateTime.Now这个类来获取当前的时间. DateTime dt = DateTime.Now; 2013/10/24 10 ...