有没有人觉得ios的复制粘贴好难用
答案:2 悬赏:20
解决时间 2021-11-28 16:50
- 提问者网友:✐ۖ﹏ℳ๓北风
- 2021-11-28 09:30
有没有人觉得ios的复制粘贴好难用
最佳答案
- 二级知识专家网友:青春如此荒謬
- 2021-11-28 11:09
话说大家是否觉得在iOS设备上发文时,复制、剪切、粘贴这些常用的功能,虽然可以通过按住选中的文字,然后使用剪贴簿的功能,不过这样键盘的收缩切换,你一定也觉得麻烦吧!再者,一般的习惯性用语、Email这一类,每次使用都必须一一输入,长时间下来还真的挺令人困扰。这些小问题,也曾困扰过你吗!?还是你也曾幻想有个快捷键盘的操作功能呢!?
「KBShortcuts」这是一款快捷键盘插件,通过按住「空白键」后,再将手指滑至「任何键」上,就能启动意想不到的快速发文功能,实现像在PC电脑上剪切、复制、粘贴快捷按键Ctrl+C,Ctrl+V一样便利。
注意:按下空格键后请不要松开手,即手不要离开屏幕,直接选择字母。
主要功能:
复制:按住空格键再移到字母C上面放开,就实现了一次拷贝
粘贴:按住空格键再移到字母V上面放开,就实现了一次粘贴
剪切:按住空格键再移到字母X上面放开,就实现了一次剪切
全选:按住空格键再移到字母A上面放开,就实现了一次全选
支持字符的快速跳转,如到行首行尾、段首段尾等
还有一些特别的快捷输入,如移到@字符上就可以快速输入设定的邮箱地址
另外还可以设置0~9这几个数字字符的快捷输入
版本 1.2 更新内容
- 增加同义词替换功能
- 修复定义功能及其他错误问题
KBShortCuts 设置
「KBShortcuts」这是一款快捷键盘插件,通过按住「空白键」后,再将手指滑至「任何键」上,就能启动意想不到的快速发文功能,实现像在PC电脑上剪切、复制、粘贴快捷按键Ctrl+C,Ctrl+V一样便利。
注意:按下空格键后请不要松开手,即手不要离开屏幕,直接选择字母。
主要功能:
复制:按住空格键再移到字母C上面放开,就实现了一次拷贝
粘贴:按住空格键再移到字母V上面放开,就实现了一次粘贴
剪切:按住空格键再移到字母X上面放开,就实现了一次剪切
全选:按住空格键再移到字母A上面放开,就实现了一次全选
支持字符的快速跳转,如到行首行尾、段首段尾等
还有一些特别的快捷输入,如移到@字符上就可以快速输入设定的邮箱地址
另外还可以设置0~9这几个数字字符的快捷输入
版本 1.2 更新内容
- 增加同义词替换功能
- 修复定义功能及其他错误问题
KBShortCuts 设置
全部回答
- 1楼网友:许你一世温柔
- 2021-11-28 11:28
在ios中下面三个控件,自身就有复制-粘贴的功能:
1、uitextview
2、uitextfield
3、uiwebview
uikit framework提供了几个类和协议方便我们在自己的应用程序中实现剪贴板的功能。
1、uipasteboard:我们可以向其中写入数据,也可以读取数据
2、uimenucontroller:显示一个快捷菜单,用来展示复制、剪贴、粘贴等选择的项。
3、uiresponder中的 canperformaction:withsender:用于控制哪些命令显示在快捷菜单中。
4、当快捷菜单上的命令点击的时候,uiresponderstandardeditactions将会被调用。
下面这些项能被放置到剪贴板中
1、uipasteboardtypeliststring — 字符串数组, 包含kuttypeutf8plaintext
2、uipasteboardtypelisturl — url数组,包含kuttypeurl
3、uipasteboardtypelistimage — 图形数组, 包含kuttypepng 和kuttypejpeg
4、uipasteboardtypelistcolor — 颜色数组
剪贴板的类型分为两种:
系统级:使用uipasteboardnamegeneral和uipasteboardnamefind,系统级应用程序关闭,或者卸载的数据不会丢失。
应用程序级:通过设置,可以让数据在应用程序关闭之后仍然保存在剪贴板中,但是应用程序卸载之后数据就会失去。我们可用通过pasteboardwithname:create:来创建。
例子如下:
有时候我们可能需要复制uilabel上的文本,或者uiimageview的图片,而uilabel和uiimageview默认是不响应touch事件的,也无法复制,那么我们就需要自己实现一个可复制的uilabel。新添加一个类继承自uilabel:
@interface uicopylabel : uilabel
@end
#import "uicopylabel.h"
@implementation uicopylabel
@end
为了能接收到事件(能成为第一响应者),我们需要覆盖一个方法:
-(bool)canbecomefirstresponder
{
return yes;
}
还需要针对复制的操作覆盖两个方法:
// 可以响应的方法
-(bool)canperformaction:(sel)action withsender:(id)sender
{
return (action == @selector(copy:));
}
//针对于响应方法的实现
-(void)copy:(id)sender
{
uipasteboard *pboard = [uipasteboard generalpasteboard];
pboard.string = self.text;
}
有了以上三个方法,我们就能处理copy了,当然,在能接收到事件的情况下:
//uilabel默认是不接收事件的,我们需要自己添加touch事件
-(void)attachtaphandler
{
self.userinteractionenabled = yes; //用户交互的总开关
uitapgesturerecognizer *touch = [[uitapgesturerecognizer alloc] initwithtarget:self action:@selector(handletap:)];
touch.numberoftapsrequired = 2;
[self addgesturerecognizer:touch];
[touch release];
}
//绑定事件
- (id)initwithframe:(cgrect)frame
{
self = [super initwithframe:frame];
if (self)
{
[self attachtaphandler];
}
return self;
}
//同上
-(void)awakefromnib
{
[super awakefromnib];
[self attachtaphandler];
}
我们已经可以接收到事件了!由于我在上方将tap数设为2,所以需要双击才能捕获,接下来,我们需要处理这个tap,以便让菜单栏弹出来:
-(void)handletap:(uigesturerecognizer*) recognizer
{
[self becomefirstresponder];
uimenuitem *copylink = [[[uimenuitemalloc] initwithtitle:@"复制"
action:@selector(copy:)]autorelease];
[[uimenucontrollersharedmenucontroller] setmenuitems:[nsarrayarraywithobjects:copylink, nil]];
[[uimenucontrollersharedmenucontroller] settargetrect:self.frameinview:self.superview];
[[uimenucontrollersharedmenucontroller] setmenuvisible:yesanimated: yes];
}
这样一来,一个可复制的uilabel就诞生了!它能处理接收点击、弹出菜单栏、处理copy,这是一个很普通的可复制控件。
接下来我们做一个可复制的uiimageview,创建一个新的viewcontroller,放两个imageview,默认显示不同的图:
然后把上面的代码直接拷过来,改三个地方:
-(bool)canperformaction:(sel)action withsender:(id)sender
{
return (action == @selector(copy:) || action == @selector(paste:));
}
-(void)copy:(id)sender
{
uipasteboard *pboard = [uipasteboard generalpasteboard];
pboard.image = self.image;
}
-(void)paste:(id)sender
{
uipasteboard *pboard = [uipasteboard generalpasteboard];
self.image = pboard.image;
}
uipasteboard有系统级别和应用级别两种类型,所以不仅可以在应用程序内通信,还能在应用程序间通信,比如我复制一个url,然后打开safari,粘贴到地址栏去,而我们可以在应用程序间通信、共享数据。
在pasteboardwrite里面点“写入”后把textfield中的文本写入粘贴板,然后切换到pasteboardread的时候显示出来。如果我们的粘贴板只想给“自己人”用的话,就不能用系统的通用粘贴板,需要我们自己创建一个:
//需要提供一个唯一的名字,一般使用倒写的域名:com.mycompany.myapp.pboard
//后面的参数表示,如果不存在,是否创建一个
uipasteboard *pb = [uipasteboard pasteboardwithname:@"testboard" create:yes];
使用这个粘贴板,我们可以把文本存进去,然后在另一个app里面读出来,一些常用的类型已经被设置为属性了:
除此之外,如果是能够转换成plist的数据类型(nsstring, nsarray, nsdictionary, nsdate, nsnumber 和 nsurl),我们可以调用setvalue:forpasteboardtype:方法去存储数据,其他类型只能调用setdata:forpasteboardtype:方法(plist数据类型也可使用),类似于这样:
//存储数据
nsdictionary *dict = [nsdictionary dictionarywithobject:textfield.text forkey:@"content"];
nsdata *dictdata = [nskeyedarchiver archiveddatawithrootobject:dict];
[pb setdata:dictdata forpasteboardtype:@"mytype"];
//获取就类似于这样:
uipasteboard *pb = [uipasteboard pasteboardwithname:@"testboard" create:yes];
nsdictionary *dict = [nskeyedunarchiver unarchiveobjectwithdata:[pb dataforpasteboardtype:@"mytype"]];
caption.text = [dict objectforkey:@"content"];
上面提到了一个pasteboardtype,这是一个统一类型标识符(uniform type identifier uti),能帮助app获取自己能处理的数据。比如你只能处理文本的粘贴,那给你一个uiimage显然是无用的。你可以使用公用的uti,也可以使用任意字符,苹果建议使用倒写的域名加上类型名:com.mycompany.myapp.mytype。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯