我正在尝试模拟iOS Pages和Keynote应用程序的粘贴板行为。简而言之,允许将基本NSAttributedString文本格式(即BIU)粘贴到UITextView中,但不能粘贴到图像,HTML等中。
行为摘要
这是如何完成的?在Mac OS上,您似乎可以要求粘贴板返回不同类型的自身,让其提供富文本格式和字符串表示形式,并首选使用富文本格式。不幸的是,iOS似乎不存在readObjectsForClasses。就是说,由于这篇文章,我可以通过日志看到iOS确实具有与RTF相关的粘贴板类型。但是,我找不到一种方法来请求粘贴板内容的NSAttributedString版本,以便可以优先进行粘贴。
背景
我有一个应用程序,允许UITextViews中的文本的基本NSAttributedString用户可编辑格式(即,粗体,斜体,下划线)。用户想要从其他应用程序复制文本(例如Safari中的网页,Notes应用程序中的文本),以粘贴到我的应用程序中的UITextView中。允许剪贴板默认运行,意味着我可能会得到应用程序不打算处理的背景颜色,图像,字体等。下面的示例显示了文本,当粘贴到我的应用程序的UITextView中时,具有背景色的复制文本看起来如何。

我可以通过继承UITextView来克服1
- (void)paste:(id)sender
{
UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
NSString *string = pasteBoard.string;
NSLog(@"Pasteboard string: %@", string);
[self insertText:string];
}
Run Code Online (Sandbox Code Playgroud)
意外的结果是,失去了保留从我的应用程序中复制的文本格式的功能。用户可能想要从我的应用程序中的一个UITextView复制文本,然后将其粘贴到我的应用程序中的另一个UITextView。他们希望保留格式(即粗体,斜体,下划线)。
的见解和建议表示赞赏。
我想将图像和文本(两者)复制到UIPasteBoard. 是否可以复制文本和图像.
在这里,我只能复制图像或仅复制文本.如何复制?
我的复制图像代码如下,
UIPasteboard *pasteBoard = [UIPasteboard pasteboardWithName:UIPasteboardNameGeneral create:NO];
pasteBoard.persistent = YES;
NSData *data = UIImagePNGRepresentation(newImage);
[pasteBoard setData:data forPasteboardType:(NSString *)kUTTypePNG];
Run Code Online (Sandbox Code Playgroud)
提前致谢 !!!!!
我一直在IOS中使用Rich文本编辑器应用程序.
我的目的是检测粘贴事件的触发UITextView,并防止默认的粘贴操作.然后,我将转换UIPasteboard为我的编辑器应用程序格式的内容并将转换后的内容附加nsattributedstring到UITextView.
我已经提到了以下链接:
我认为问题的解决方案与(UITextField而不是)相关UITextView(纠正我,如果我错了).
谢谢你的回答.
我想将HTML从我的应用程序传输到iPhone邮件应用程序.我已经有了HTML文本 - 至少说<span style ='color:red'>测试</ span>我可以将它放到UIPasteBoard - 但是当我将它粘贴到邮件时,我得到了html源代码.
当我在HTMLView中放置相同的字符串时 - 在那里选择并复制它,它将粘贴为邮件中的红色文本.
我需要做什么才能将字符串放在UIPasteBoard中,以便将其作为红色文本粘贴到邮件应用程序中?我一直在寻找"格式类型" - 并且发现当我在剪贴板中有元素(从UIWebView复制)时,UIPasteBoard返回"Aplle Web Archive粘贴板类型".但是在将内容添加到UIPasteBoard时将其设置为类型会在邮件应用程序中粘贴任何内容.
曼弗雷德
我知道这是可能的,因为Tapbots Pastebot这样做.当我的iPhone应用程序在后台运行时,我试图抓住UIPasteboard并将其添加到UITableView,就像Pastebot一样,但我也试图缩短链接,如果它是一个URL并将其复制回UIPastboard以便它准备就绪供用户粘贴到任何地方.现在,Pastebot通过播放音频文件10分钟显然在后台运行.我在applicationDidFinishLaunching中设置了NSNotificationCenter
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pasteboardChangedNotification:) name:UIPasteboardChangedNotification object:[UIPasteboard generalPasteboard]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pasteboardChangedNotification:) name:UIPasteboardRemovedNotification object:[UIPasteboard generalPasteboard]];
- (void)pasteboardChangedNotification:(NSNotification*)notification {
pasteboardChangeCount_ = [UIPasteboard generalPasteboard].changeCount;
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if (pasteboardChangeCount_ != [UIPasteboard generalPasteboard].changeCount) {
[[NSNotificationCenter defaultCenter] postNotificationName:UIPasteboardChangedNotification object:[UIPasteboard generalPasteboard]];
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以指点我抓住UIPasteboard并缩短链接,如果它是一个URL并将其发送回UIPasteboard?我已经阅读了多任务开发文档和UIPasteboard文档.如果有人有解决方案,请与我分享?
谢谢
我想展示一个gif,所以我做的是我拆分我的gif并使用此链接在UIImageView的动画中显示它.
http://iphonenativeapp.blogspot.com/2011/03/how-to-show-animation-in-iphoneipad-app.html
现在,我想让用户复制gif并将其粘贴到邮件应用程序中.
如果我使用包含gif的所有分割图像的数组,则将4-5张图像粘贴到邮件应用程序中.
请帮我粘贴gif.谢谢!
我们有一个现有的应用程序,允许用户将文本复制到粘贴板.在可能的情况下,我们将HTML和纯文本放在剪贴板上,因为我们不知道用户可能粘贴的其他应用程序,并希望提供格式化(HTML)和未格式化的数据.
此功能在iOS 3和4中运行良好.但是一旦用户安装iOS 5,当他们将我们的应用程序中的文本粘贴到任何其他应用程序时,另一个应用程序将获取HTML文本但将其视为纯文本.因此,如果他们选择并复制H1标题,当他们粘贴到另一个应用程序时,而不是看到"这是一个标题",他们会看到"<h1>这是一个标题</ h1>".
请注意,现有代码在iOS 3和4中运行良好.在iOS 3,4和5之间我们的代码没有变化.
为了完整起见,这里是我们用来将我们的文本放在粘贴板上的代码,提供一个简单的字符串仅供参考:
NSString * plainText = @"A Big Heading\r\nA regular paragraph.";
NSString * htmlText = @"<h1>A Big Heading</h1><p>A regular paragraph.</p>";
UIPasteboard * pasteboard = [UIPasteboard generalPasteboard];
pasteboard.items = [NSArray arrayWithObject:
[NSDictionary dictionaryWithObjectsAndKeys:
plainText, @"public.utf8-plain-text", htmlText, @"public.html", nil]];
Run Code Online (Sandbox Code Playgroud)
显然,我的问题是"为什么iOS 5应用程序在请求纯文本时会获取HTML文本,而在iOS 4下运行的相同应用程序会获得纯文本?"
我正在手动设置粘贴板中的复制内容
@IBAction func onOkPressed( button: UIButton ) {
var testImage = getImageWithColor(UIColor.redColor(), size: CGSize(width: 100, height: 100));
UIPasteboard.generalPasteboard().image = testImage
}
func getImageWithColor(color: UIColor, size: CGSize) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(CGRectMake(0, 0, 100, 100))
var image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
Run Code Online (Sandbox Code Playgroud)
但是当我将图像粘贴到模拟器中的文本框中时,它不会粘贴图像.我已尝试使用本地png图像,而不是手动创建图像.当我在自定义键盘应用程序中粘贴到教科书上时,它会粘贴我的mac剪贴板中的文本而不是图像.但是,如果我以编程方式执行,则会UIPasteboard.generalPasteboard().string = "TeST"粘贴expect字符串.谁知道什么可能是错的?谢谢.
假设在 UIPasteBoard 上复制了 3 个字符串:
UIPasteboard.generalPasteboard().string="hello"
UIPasteboard.generalPasteboard().string="world"
UIPasteboard.generalPasteboard().string="!"
Run Code Online (Sandbox Code Playgroud)
我使用 UIPasteboard.generalPasteboard().string=""
它会清除粘贴板吗?UIPasteBoard 有没有类似的功能,就像 NSPasteBoard 有 clearContents() 一样?
我想创建iOS时提供的本机复制和粘贴体验,当您点击并按住UITextField- 但我希望它可以在一个UILabel而不是一个UITextField.
这是可能的,还是只适用于它的东西UITextField?我是否需要创建自己的自定义用户界面并乱七八糟UIPasteboard或是否有更有说服力的解决方案?
这是一个典型的例子,虽然它通常也显示放大的圆圈:
uipasteboard ×10
ios ×6
iphone ×5
swift ×3
clipboard ×1
copy-paste ×1
gif ×1
html ×1
ios5 ×1
ios7 ×1
ipad ×1
multitasking ×1
uilabel ×1
uitextview ×1
url ×1
uti ×1