您的位置:首页 > 产品设计 > UI/UE

在UITextField的光标处插入文本(iOS3.0)

2012-03-13 22:01 246 查看
原文: http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html

iOS SDK的文本输入控件(UITextField、UITextView等)从设计起就不支持第3方的扩展。我需要在iPhone应用中提供一个功能:在UITextField当前选中位置插入文本。在UITextField及其父类方法和协议中都找不到这样一个方法。
一种可行的办法是先获取UITextField的内容,在最后追加所需的文本,然后重新设置UITextField的内容。如果光标刚好在UITextField文本的最后位置(通常的情况),这样做是可以的。但如果光标正处于UITextField文本的中间,则就麻烦了。
在iOS3.0中,有一个解决办法。-(void)paste:(id)sender方法可以从系统剪贴板中粘贴文本到光标当前位置。因此我们需要做的就是临时借用一下系统剪贴板。基本上这要经过以下步骤:
获取系统剪贴板引用
保存系统剪贴板内容,以备最后能恢复它们
将系统剪贴板的内容修改为你希望去插入的文本
发送-(void)paste:(id)sender消息至UITextField或UITextView
恢复系统剪贴板原来的内容
我们为UIResponder新增了一个类别,并在类别中加入方法-(void)insertText:(NSString*)text,这个方法就能用于任何文本编辑视图。
@interface UIResponder(UIResponderInsertTextAdditions)
- (void) insertText: (NSString*) text;
@end
@implementation UIResponder(UIResponderInsertTextAdditions)
- (void) insertText: (NSString*) text {
// 获取系统剪贴板
UIPasteboard* generalPasteboard= [UIPasteboard generalPasteboard];
// 保存系统剪贴板内容,以便最后能恢复它们
NSArray* items =[generalPasteboard.items copy];

//修改系统剪贴板的内容为要插入的文本
generalPasteboard.string = text;
// 告诉responder从系统剪贴板粘贴文本到当前光标位置
[self paste: self];
// 恢复系统剪贴板原有的内容
generalPasteboard.items = items;
// 释放临时数组items
[items release];
}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: