在开发应用程序的过程中,有人向我提交了一个错误报告 - “无法将长文本粘贴到文本字段中”。果然,它悬挂在水龙头上的“粘贴”气泡中,并且没有任何事情发生。我做了一点实验,发现一切都适用于大约60,000个字符的文件(并且不会花费相当长的时间),但65537每次都会杀掉它。
我进一步尝试并发现一些第三方应用以及“Notes”应用显示相同的行为。
如果这是UITextView中的一个真正的问题(在iOS6中)我不希望能够修复它以便可以粘贴大文本但我想尽可能避免挂起。任何人都可以建议一种在挂起UITextView之前捕获文本的方法吗?
编辑:感谢rmaddy,以下是我过去的工作原理:
#import <MobileCoreServices/UTCoreTypes.h>
#define kUITextViewMaximumPaste (65000)
...
- (void)paste:(id)sender {
UIPasteboard *pb = [UIPasteboard generalPasteboard];
NSString *type = (NSString *)kUTTypeText;
if ([pb containsPasteboardTypes:@[type]]) {
NSString *txt = [pb valueForPasteboardType:type];
if([txt length] > kUITextViewMaximumPaste) {
[pb setValue:[txt substringToIndex:kUITextViewMaximumPaste] forPasteboardType:type];
}
}
[super paste:sender];
}
答案 0 :(得分:3)
我需要做类似的事情但出于不同的原因。我所做的是在包含paste:
的自定义视图中实现UITextView
方法。正如评论中暗示的那样,最好创建自己的UITextView
自定义子类并实现paste:
方法:
- (void)paste:(id)sender {
if ([[UIPasteboard generalPasteboard] containsPasteboardTypes:[NSArray arrayWithObjects:(NSString *)kUTTypeUTF8PlainText, nil]]) {
NSString *txt = [[UIPasteboard generalPasteboard] valueForPasteboardType:(NSString *)kUTTypeUTF8PlainText];
if (txt.length > 65535) {
// oops - too long
// either truncate or ignore
return;
}
}
[super paste:sender];
}
您可能还需要处理其他粘贴板类型。如果用户复制并粘贴网页的一部分,您可能会看到正在粘贴的其他类型。