- 浏览: 340238 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
leslie89757:
[img][img][img][img][img][img][ ...
CocoaPods 安装使用 -
hanmeizhi:
very useful to me. Thanks
Dismissing MPMoviePlayerViewController the right way -
luzj:
这个考虑不周全, 在iOS5的键盘高度就不是这个值了,这样写死 ...
UITextView: move view when keyboard appears -
xjg19870111:
不错。
objective-c NSString 常用操作 -
juedui0769:
现在已经不行了!
android源码下载
UIWebView长按图片生成保存菜单
参考:
http://www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/
http://www.icab.de/blog/2011/10/17/elementfrompoint-under-ios-5/comment-page-1/#comment-30184
自定义UILongPressGestureRecognizer
创建 UnpreventableUILongPressGestureRecognizer.h
UnpreventableUILongPressGestureRecognizer.m
UIWebview页面给webview添加手势 ViewController.m:
ViewController.m 处理手势:
创建分类 WebViewAdditions.h
WebViewAdditions.m
弹出菜单 ViewController.m
工具文件 JSTools.js
ViewController.m 处理ActionSheet事件
参考:
http://www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/
http://www.icab.de/blog/2011/10/17/elementfrompoint-under-ios-5/comment-page-1/#comment-30184
自定义UILongPressGestureRecognizer
创建 UnpreventableUILongPressGestureRecognizer.h
#import <Foundation/Foundation.h> @interface UnpreventableUILongPressGestureRecognizer : UILongPressGestureRecognizer { } @end
UnpreventableUILongPressGestureRecognizer.m
#import "UnpreventableUILongPressGestureRecognizer.h" @implementation UnpreventableUILongPressGestureRecognizer - (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer { return NO; } @end
UIWebview页面给webview添加手势 ViewController.m:
UnpreventableUILongPressGestureRecognizer *longPressRecognizer = [[UnpreventableUILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; longPressRecognizer.allowableMovement = 20; longPressRecognizer.minimumPressDuration = 1.0f; [webview addGestureRecognizer:longPressRecognizer];
ViewController.m 处理手势:
-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer { if (gestureRecognizer.state == UIGestureRecognizerStateBegan) { CGPoint pt = [gestureRecognizer locationInView:self.webview]; // convert point from view to HTML coordinate system // 뷰의 포인트 위치를 HTML 좌표계로 변경한다. CGSize viewSize = [webview frame].size; CGSize windowSize = [webview windowSize]; CGFloat f = windowSize.width / viewSize.width; if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 5.0) { pt.x = pt.x * f; pt.y = pt.y * f; } else { // On iOS 4 and previous, document.elementFromPoint is not taking // offset into account, we have to handle it CGPoint offset = [webview scrollOffset]; pt.x = pt.x * f + offset.x; pt.y = pt.y * f + offset.y; } [self openContextualMenuAt:pt]; } }
创建分类 WebViewAdditions.h
#import <foundation foundation.h=""> @interface UIWebView(WebViewAdditions) - (CGSize)windowSize; - (CGPoint)scrollOffset; @end </foundation>
WebViewAdditions.m
#import "WebViewAdditions.h" @implementation UIWebView(WebViewAdditions) - (CGSize)windowSize { CGSize size; size.width = [[self stringByEvaluatingJavaScriptFromString:@"window.innerWidth"] integerValue]; size.height = [[self stringByEvaluatingJavaScriptFromString:@"window.innerHeight"] integerValue]; return size; } - (CGPoint)scrollOffset { CGPoint pt; pt.x = [[self stringByEvaluatingJavaScriptFromString:@"window.pageXOffset"] integerValue]; pt.y = [[self stringByEvaluatingJavaScriptFromString:@"window.pageYOffset"] integerValue]; return pt; } @end
弹出菜单 ViewController.m
- (void)openContextualMenuAt:(CGPoint)pt{ // Load the JavaScript code from the Resources and inject it into the web page NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"Naving" ofType:@"bundle"]]; NSString *path = [bundle pathForResource:@"JSTools" ofType:@"js"]; NSString *jsCode = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; [webview stringByEvaluatingJavaScriptFromString:jsCode]; // get the Tags at the touch location NSString *tags = [webview stringByEvaluatingJavaScriptFromString: [NSString stringWithFormat:@"MyAppGetHTMLElementsAtPoint(%i,%i);",(NSInteger)pt.x,(NSInteger)pt.y]]; NSString *tagsHREF = [webview stringByEvaluatingJavaScriptFromString: [NSString stringWithFormat:@"MyAppGetLinkHREFAtPoint(%i,%i);",(NSInteger)pt.x,(NSInteger)pt.y]]; NSString *tagsSRC = [webview stringByEvaluatingJavaScriptFromString: [NSString stringWithFormat:@"MyAppGetLinkSRCAtPoint(%i,%i);",(NSInteger)pt.x,(NSInteger)pt.y]]; NSLog(@"tags : %@",tags); NSLog(@"href : %@",tagsHREF); NSLog(@"src : %@",tagsSRC); if (!_actionActionSheet) { _actionActionSheet = nil; } _actionActionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; selectedLinkURL = @""; selectedImageURL = @""; // If an image was touched, add image-related buttons. if ([tags rangeOfString:@",IMG,"].location != NSNotFound) { selectedImageURL = tagsSRC; if (_actionActionSheet.title == nil) { _actionActionSheet.title = tagsSRC; } [_actionActionSheet addButtonWithTitle:@"Save Image"]; [_actionActionSheet addButtonWithTitle:@"Copy Image"]; } // If a link is pressed add image buttons. if ([tags rangeOfString:@",A,"].location != NSNotFound){ selectedLinkURL = tagsHREF; _actionActionSheet.title = tagsHREF; [_actionActionSheet addButtonWithTitle:@"Open Link"]; [_actionActionSheet addButtonWithTitle:@"Copy Link"]; } if (_actionActionSheet.numberOfButtons > 0) { [_actionActionSheet addButtonWithTitle:@"Cancel"]; _actionActionSheet.cancelButtonIndex = (_actionActionSheet.numberOfButtons-1); [_actionActionSheet showInView:webview]; } }
工具文件 JSTools.js
function MyAppGetHTMLElementsAtPoint(x,y) { var tags = ","; var e = document.elementFromPoint(x,y); while (e) { if (e.tagName) { tags += e.tagName + ','; } e = e.parentNode; } return tags; } function MyAppGetLinkSRCAtPoint(x,y) { var tags = ""; var e = document.elementFromPoint(x,y); while (e) { if (e.src) { tags += e.src; break; } e = e.parentNode; } return tags; } function MyAppGetLinkHREFAtPoint(x,y) { var tags = ""; var e = document.elementFromPoint(x,y); while (e) { if (e.href) { tags += e.href; break; } e = e.parentNode; } return tags; }
ViewController.m 处理ActionSheet事件
#pragma UIActionSheetDelegate -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ if ([[actionSheet buttonTitleAtIndex:buttonIndex] isEqualToString:@"Open Link"]){ [webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:selectedLinkURL]]]; } else if ([[actionSheet buttonTitleAtIndex:buttonIndex] isEqualToString:@"Copy Link"]){ [[UIPasteboard generalPasteboard] setString:selectedLinkURL]; } else if ([[actionSheet buttonTitleAtIndex:buttonIndex] isEqualToString:@"Copy Image"]){ [[UIPasteboard generalPasteboard] setString:selectedImageURL]; } else if ([[actionSheet buttonTitleAtIndex:buttonIndex] isEqualToString:@"Save Image"]){ NSOperationQueue *queue = [NSOperationQueue new]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(saveImageURL:) object:selectedImageURL]; [queue addOperation:operation]; //[operation release]; } } -(void)saveImageURL:(NSString*)url{ [self performSelectorOnMainThread:@selector(showStartSaveAlert) withObject:nil waitUntilDone:YES]; UIImageWriteToSavedPhotosAlbum([UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]], nil, nil, nil); [self performSelectorOnMainThread:@selector(showFinishedSaveAlert) withObject:nil waitUntilDone:YES]; }
发表评论
-
IOS7.1 企业应用 证书无效 已解决
2014-05-10 10:53 774http://www.cocoachina.com/bbs/r ... -
xCode Find&Replace快捷键
2013-10-28 10:44 907As for Find & Replace, they ... -
iOS整合zxing需要注意的地方
2013-08-02 23:34 2106Well, at last I got it working. ... -
iOS 自定义Tabbar
2013-07-30 22:55 1191http://www.appcoda.com/ios-prog ... -
Apple Push Notification Service总结
2013-07-29 22:39 1115苹果推送通知服务使用总结 1. 在 Mac 上从 KeyCha ... -
iOS 消息推送原理及实现
2013-07-12 13:40 855链接: http://www.dapps.net/dev/ ... -
GIMP IMAGE MAP
2013-05-29 16:13 853使用GIMP 制作 IMAGE MAP 1. 选择图片,用G ... -
INSPIRATION
2013-05-27 18:21 813http://www.patternsofdesign.co. ... -
iOS 自定义控件系列
2013-05-27 17:09 1481iOS自定义控件 自定义UITableViewCell ht ... -
CocoaPods 使用教程
2013-05-27 14:49 768http://mobile.tutsplus.com/tuto ... -
IOS 开发之设置UIButton的title
2013-05-11 22:03 1207btn.frame = CGRectMake(x, y, wi ... -
REActivityViewController 使用 备忘
2013-04-22 21:38 1058REActivityViewController Out o ... -
VPS配置二级域名
2013-04-18 23:08 7881. 域名解析商配置泛解析 主机记录 * 记录类型 A 2. ... -
ios 开发NewsStand指南
2013-04-13 21:44 1324http://www.viggiosoft.com/blog/ ... -
Python Django mod_wsgi Windows 部署过程 备忘
2013-04-10 18:28 1587部署环境:Windows2003Server 1. 安装Ap ... -
网站迁移 备忘
2013-04-10 14:58 7511. 备份数据库。。。导出的格式和编码要注意 2. 完全导出网 ... -
Windows下命令行查看端口占用
2013-04-09 23:42 723在windows命令行窗口下执行: C:\>netst ... -
带预览功能又可分页的UIScrollView
2013-04-05 12:56 823带预览功能又可分页的UIScrollView http:// ... -
25 iOS App 性能优化
2013-04-05 10:51 695http://www.raywenderlich.com/ ... -
UIScrollView滚动, 中间显示整图, 前后露出部分图
2013-04-04 00:12 1200UIScrollView *scrollowView = [[ ...
相关推荐
然而,当我们要在UIWebView中加载本地图片时,就需要对这个过程做一些特别的处理。这篇教程将详细解释如何在UIWebView中加载本地图片,并提供一个实例代码来帮助理解。 首先,我们需要了解UIWebView的基本用法。...
这篇教程将详细介绍如何在Objective-C中实现“获取UIWebView里的图片”的操作。 首先,我们要明白UIWebView与JavaScript的交互机制。UIWebView提供了一个名为`stringByEvaluatingJavaScriptFromString:`的方法,...
本文将详细讲解如何在UIWebView中进行Cookie的读取与保存。 首先,理解Cookie的基本概念。Cookie是由服务器发送到用户的浏览器并存储在本地的小型文本文件,用于在用户与服务器之间维持状态。当用户再次请求同一...
但是,UIWebView本身并不支持直接加载本地资源。为了实现这一需求,文中提出了通过URL拦截的方法来解决。 首先,我们需要了解iOS中的URL Loading System,这是一个系统级别的网络请求框架,UIWebView正是利用这个...
默认情况下,长按web页面中的链接,系统会自动呼出菜单提供open,copy和cancel选项,但如果要实现触击链接跳转至safari中打开页面该怎么做呢?UIWebViewDelegate协议中,包含 ? 1 - (BOOL)webView:(UIWebView *)...
4. **返回上页功能**: 要实现"返回上页"的功能,需要保存每个页面的`UIWebView`的历史记录。当用户点击“返回”按钮时,调用`goBack()`方法: ```swift if webView.canGoBack { webView.goBack() } ``` 5. **在...
【标题】:“IOS UIWebView Demo”是一个iOS应用开发中的实例,它主要展示了如何在iOS应用中集成和使用UIWebView组件来加载和展示网页内容。UIWebView是Apple iOS SDK提供的一种原生控件,用于在iOS应用程序内部显示...
一种常见方法是将GIF转换为一系列静态图片,然后用JavaScript动态切换图片来模拟动画效果。另一种方法是使用第三方库,如`SDWebImage`,它可以自动处理GIF动图并在UIWebView中显示。 五、HSWebViewSample ...
在iOS应用开发中,UIWebView是一个非常重要的组件,它允许开发者在应用程序内嵌入网页内容,实现网页浏览功能。这个示例程序是针对iPhone平台,旨在帮助开发者理解如何有效地使用UIWebView来展示网页数据。通过这个...
当需要在应用中实现图文混排时,UIWebView是一个非常实用的选择,因为它能够轻松地将文字和图片结合在一起显示。本篇文章将详细探讨如何利用UIWebView来实现这一功能。 首先,我们需要理解图文混排的基本概念。图文...
在iOS开发中,UIWebView是苹果提供的一种原生控件,用于展示网页内容。它可以加载HTML、CSS和JavaScript代码,并且支持与JavaScript进行交互,从而实现原生应用和Web内容的融合。本教程将深入探讨UIWebView与...
在iOS开发中,UIWebView是苹果提供的一种非常重要的组件,它允许开发者在应用程序内部嵌入网页内容,实现类似浏览器的功能。这个"UIWebView的使用"示例是一个基础的学习项目,旨在帮助开发者理解如何通过UIWebView...
在iOS开发中,UIWebView是苹果提供的一种非常重要的组件,用于在原生应用中嵌入网页内容。这个组件使得开发者可以展示HTML、CSS和JavaScript编写的网页,甚至与应用程序进行交互,实现一定的混合开发模式。以下是对...
在iOS开发中,UIWebView是苹果提供的一种原生控件,用于展示网页内容。它可以加载HTML、CSS和JavaScript代码,并且具有与Objective-C(OC)代码进行交互的能力。本项目"UIWebView和js交互demo1"就是展示了如何利用...
在本文中,我们将深入探讨UIWebView的基本使用,包括网络资源地址字符串的处理以及UIWebView的属性和协议的综合应用。 首先,让我们了解一下**UIWebView的基本使用**。创建一个UIWebView实例很简单,只需要在代码中...
然而,随着Apple对App Store审核政策的调整,使用UIWebView的App将不再被接受,因为Apple已经将其列为弃用API。在2020年,Apple明确表示,自2020年12月起,所有新提交的App和更新都必须移除UIWebView的使用,转而...
在iOS开发中,UIWebView是苹果提供的一种原生控件,用于在应用内展示网页内容。这个"UIWebView与javascript的交互"的标题暗示了我们正在探讨如何在iOS应用中利用UIWebView与嵌入的HTML页面进行双向通信,即通过...
在iOS开发中,UIWebView是苹果提供的一种用于在应用程序中展示网页内容的组件。这篇博客“UIWebView加载html”很可能是讨论如何利用UIWebView来加载并显示HTML代码,这对于构建混合式应用或者需要在App内嵌入网页...
在iOS开发中,UIWebView是苹果提供的一种组件,用于在应用程序中展示网页内容。它不仅可以加载HTML页面,还可以执行JavaScript代码,甚至与原生代码进行交互。这种交互性使得开发者可以利用HTML、CSS和JavaScript的...