我已成功地使用以下代码将图像复制或添加到粘贴板:
if (ver_float < 6.0)
{
UIPasteboard *pasteboard;
pasteboard = [UIPasteboard generalPasteboard];
NSString *filePath =pathToImage;
[pasteboard setImage:[UIImage imageWithContentsOfFile:filePath]];
}
else
{
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSString *filePath =pathToImage;
NSData *videoData = [NSData dataWithContentsOfFile:filePath];
[pasteboard setData:videoData forPasteboardType:[UIPasteboardTypeListImage objectAtIndex:0]];
}
NSURL *urlstr = [NSURL URLWithString:@"sms:"];
[[UIApplication sharedApplication] openURL:urlstr];
Run Code Online (Sandbox Code Playgroud)
但我正在制作的应用程序基于图像和视频,以便用户可以通过imessage或messagecomposer发送图像/视频.但是因为我已将图像转换为数据并添加到粘贴板中.它正在成功地工作并通过imessage发送.但我还需要通过imessage发送视频.如果有人对此有任何想法,请提供一些建议或解决方案.
我非常感谢你的帮助.
我试图找到一种方法来UIPasteBoard将HTML字符串复制到粘贴板中,并能够将其粘贴到iOS上的不同邮件客户端.
我尝试了StackOverflow的两个接受的答案:https://stackoverflow.com/a/6566850/1249958 和/sf/answers/1533839821/.这些解决方案适用于默认的iOS邮件客户端,但它们对Gmail没有任何影响.
我知道Gmail接受来自粘贴板的HTML输入,因为从Safari复制HTML并将其粘贴到Gmail应用中可以正常工作.
我认为这比我的应用程序更像是一个SDK漏洞,但最近我一直在尝试使用UIPasteboard从我的应用程序中复制字符串,当我在应用程序内部时,它可以很好地粘贴到某个地方.
当我通过按主页按钮或类似的东西跳转到另一个应用程序时,我根本没有选择粘贴复制的内容.
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
[pasteboard setString: @"blah" ];
NSLog(@"%@", pasteboard.string);
Run Code Online (Sandbox Code Playgroud)
在这种情况下它将打印"blah",每当我快速触摸文本字段时,它将显示粘贴选项.但是,如果我去Safari,Notes或Mail它没有向我显示该选项.
此外,如果我从邮件中复制一些东西并转到我的应用程序,我也不会看到粘贴选项...
当我手动调出"新消息"时,我会在文本编辑区域的左侧看到一个摄像头图标.当我使用MFMessageComposeViewController时,它不会显示此图标,这意味着您无法插入图像.我知道这可以做到,因为制作txtAgif的人可以做到.一个微妙的区别是盖子已打开.这可能是他们如何使其发挥作用的线索.
我知道MFMessageComposeViewController不允许您以编程方式插入图像,这就是我正在复制到UIPasteboard技巧的原因.这部分很完美.
这个同样的问题已经被问在这里和这里的问题没有得到回答除了"它不能这样做."
这是我的第一篇文章,所以我没有足够高的排名来贡献其他问题的帖子.
他们是怎么做到的?有没有MFMessageComposeViewController的技巧或他们使用完全不同的东西?
我的应用程序是一个丰富的编辑器,它使用UIWebView和HTML5的contenteditable功能.
现在,我的应用程序有一些问题来处理复制网站内容由Safari浏览我的UIWebView当网页内容有任何image.I要像HTML标签替换<img>在UIPasteboard我的一些图片.
但是,当我使用以下代码检查粘贴板时,粘贴板中没有任何图像.但从safari复制/粘贴图像到我的应用程序工作正常.
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSLog(@"clip board strings = %@", pasteboard.strings);
NSLog(@"clip board urls = %@", pasteboard.URLs);
NSLog(@"clip board images = %@", pasteboard.images);
Run Code Online (Sandbox Code Playgroud)
如果我从safari复制一些图像和文本然后打开我的应用程序,NSLog如下:
2012-04-20 14:53:37.558 clip board strings = (
"text"
)
2012-04-20 14:53:37.559 [46800:17903] clip board urls = (
)
2012-04-20 14:53:37.559 [46800:17903] clip board images = (null)
Run Code Online (Sandbox Code Playgroud)
我想问一下,如何从UIPasteboard获取图像信息以及如何操作它?
提前致谢.
我正在尝试将GIF图像复制到UIPasteboard中,目前它只复制图像的静态版本,并且当我将其上传到某处时,似乎将其转换为PNG,查看文件扩展名.
想知道是否有人知道如何实现这一目标?我发现的所有其他解决方案在从URL而不是从包中的图像获取NSData时似乎只能工作
我一直在研究如何安全地在应用程序之间共享数据.在使用错误的方法深入研究实现之前,我想获得一些正确的处理方法的信息.只是因为你可以做某事并不一定意味着你应该做.
用户案例:我正在开发一套语言学习应用程序,它们具有数百个音频文件的共享音频文件,以及包含与语言相对应的重要数据的json文件.我更愿意允许用户在我们的套件中使用其他应用时不必重新下载语言包.
1.应用扩展程序 - 文档提供程序非UI变体
根据文件:
文件提供程序扩展使用打开和移动操作授予对主机应用程序沙箱外部文件的访问权限.此扩展(有时缩短到文件提供程序)还允许主机应用程序下载文件而不显示文档选择器视图控制器.此功能允许主机应用程序使用安全URL书签访问以前打开的文档,即使这些文件不再存储在设备上也是如此.
从表面上看,这似乎是一个非常可靠的解决方案.我主要担心的是最后几行,它表明应用程序可以下载不再存储在设备上的文件.我希望文件存储在设备本地,以防止不断下载.如果文档提供程序确实在本地存储文件并允许组中的各种应用程序访问文件,那么我认为这可行.
2.共享钥匙串访问
允许您将数据安全地存储到共享密钥链,以便属于一组应用程序的其他应用程序可以访问.共享密钥链访问权限的所有应用程序必须使用相同的应用程序ID前缀.有关共享密钥链访问的示例.
我看了一下这个文档,我认为这可能是最合适的.我对此解决方案的主要关注是上传的数据是否存在大小限制,以及是否允许使用mp3/ogg/json文件类型.我在这个解决方案中发现的大多数示例/用途都指向共享字符串和小数据,我不确定它是否会处理像json或音频文件这样的大数据.
我还发现这个回购显然更容易处理Keychain:
3.定制粘贴板
自定义粘贴板最适合在两个应用程序之间半私有地共享自定义数据.使用唯一名称标识自定义粘贴板.它们可以将数据保留在创建它们的应用程序之外,允许粘贴板在应用程序终止后或甚至在重新启动设备后保留数据.
在粘贴板上写入数据或从中读取数据时,必须指定粘贴板类型.粘贴板类型通常使用统一类型标识符(UTI)来标识进入粘贴板并从粘贴板检索的数据类型.有关其他信息,请参阅Apple的UIPasteboard类参考文档.
以上文档摘自这篇文章
我对这个解决方案的主要关注点可能是它有点像黑客.从逻辑上讲,粘贴板似乎是临时保存数据并允许在应用程序之间共享的东西,而我正在寻找的解决方案需要更多的永久解决方案.
我很感激有关在应用之间共享这些类型文件的最佳做法的任何信息.我假设有很多其他的解决方案我在这里省略了,所以如果有更好的选择,我会喜欢它的一些信息.如果它发生了我在这里列出的解决方案之一是一个解决这个问题的好方法我想更多地了解你与他们合作的经验,如果我对他们的关注是有效的,或者没有什么可担心的.
Thx提前.一如既往,写得很好的答案得到了投票;)
此代码应将字符串复制到generalPasteboard,作为[[UIPasteboard generalPasteboard] string]对象,但该方法会导致程序终止.
- (void)copyResultToPasteboard {
NSString *message = self.resultTextView.text;
[UIPasteboard generalPasteboard].string = message;
[message release];
}
Run Code Online (Sandbox Code Playgroud)
我认为这与格式有关,因为如果消息设置为文字字符串,方法可以正常工作,但是resultTextView.text只是一个NSString ...我不完全明白,任何人都可以帮忙吗?
我正在开发一个应用程序,其中一个模块是,一个简单的列表TableView,显示音频文件列表.当用户选择任何音频文件时,操作表附带一个选项SMS.我需要通过短信发送特定的音频文件.请让我知道如何使用它.
如果这是不可能的,请提供苹果文档,以便它作为我展示的证据.
这是我试图粘贴音频文件...
第一种方式:
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSString *path = [[NSBundle mainBundle] pathForResource:@"audiofilename" ofType:@"caf"];
NSData *myData = [NSData dataWithContentsOfFile:path];
[pasteboard setData:myData forPasteboardType:@"audiofile"];
NSString *copyPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/audiofile.caf"];
NSURL *sndURL = [NSURL fileURLWithPath:copyPath];
[pasteboard setString:[NSString stringWithFormat:@"%@",sndURL]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"sms:12345678"]]];
Run Code Online (Sandbox Code Playgroud)
第二种方式:
Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));
if([messageClass canSendText])
{
messagepicker = [[MFMessageComposeViewController alloc] init];
messagepicker.messageComposeDelegate = self;
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSString *path = [[NSBundle mainBundle] pathForResource:@"290912044119" ofType:@"caf"];
NSData *myData = [NSData dataWithContentsOfFile:path];
[pasteboard setData:myData forPasteboardType:@"audiofile"];
NSString *copyPath …Run Code Online (Sandbox Code Playgroud) 最近iOS有iOS 10的更新并且开发人员有一些变化,其中一个变化是现在我们无法检查允许完全访问我们之前做过的方式在下面给出
-(BOOL)isOpenAccessGranted{
return [UIPasteboard generalPasteboard];
}
Run Code Online (Sandbox Code Playgroud)
我搜索了最新的UIPasteboard开发者指南,但无法解决.有没有人有一个适当的解决方案.
uipasteboard ×10
ios ×7
iphone ×6
objective-c ×3
swift ×2
cocoa ×1
data-sharing ×1
gif ×1
gmail ×1
ios10 ×1
keyboard ×1
keychain ×1
mms ×1
nsstring ×1
pasteboard ×1
sms ×1
uiwebview ×1