iphone复制不能全选_IOS默认全选复制的三种方案

时间:2025-02-11 12:47:19

类似于textField,长按就会默认跳出复制的选项,但是默认选中的就是你手指点击的那个文字,想全选的话必须手动选择全选才可以,而最近碰到一个需求就是要点击文字,默认就是选中所有的文字,比如游戏中的邀请码,应用中的推广码等,所以默认全选复制肯定比再点击全选便捷,一般就是默认选择或者弹出提醒。这个就是这篇文章的使用意义

方案思路

一般显示文字的地方一般就是Label,textField,textView,Button这几种地方,所以要想默认全选复制文字,也就这几个控件,所以就从这里入手,所以三种方案分别是,从上到下,简单到麻烦textView加手势

Label加手势(button按钮和这个是一个原理,所以不再写button的了)

textField

一、textView加手势使用

textView主要就是显示文字的一个View,这里的方案就是先禁止textView的输入,因为发现textView可以单独禁止输入,并且禁止输入不会影响选择,但是禁止输入会影响响应他UITextViewDelegate的代理函数,所以需要另外加上一个手势去响应点击事件,函数主要就是响应select all这个函数 = [[UITextView alloc] initWithFrame:CGRectMake(100,500,300,40)];

[ setText:@"Damon胡东东"];

 = self;

[ setTextColor:[UIColor redColor]];

[ addSubview:];

//禁止输入

 =NO;

//增加点击手势

UITapGestureRecognizer *tap2 =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(testView)];

[ addGestureRecognizer:tap2];

手势的响应函数-(void)testView{

NSLog(@"textView的手势");

[ selectAll:self];

}

效果图

二、Label加手势

Label没有select all的响应函数,并且不会响应点击事件,所以需要给Label加上点击手势去响应点击事件,内容的复制使用系统的剪切板来保存数据,交互方式选择弹窗提醒。 = [[UILabel alloc] initWithFrame:CGRectMake(100, 300, 300, 40)];

[ setText:@"哈哈哈"];

[ setTextColor:[UIColor grayColor]];

[ addSubview:];

//增加手势

[ setUserInteractionEnabled:YES];

UITapGestureRecognizer *tap =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(testLabel:)];

[ addGestureRecognizer:tap];

手势的响应函数-(void)testLabel:(id)sender{

NSLog(@"Label的手势");

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"点击拷贝Label信息" preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *al = [UIAlertAction actionWithTitle:@"拷贝" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

//复制

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];

[pasteboard setString:];

NSLog(@"拷贝成功");

}];

UIAlertAction *al2 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

}];

[alert addAction:al];

[alert addAction:al2];

[self presentViewController:alert animated:YES completion:nil];

}

UIPasteboard是系统的默认剪切板,所以可以把label的信息保存在剪切板在其他应用使用

效果图

下面这个就是复制到浏览器的Label内容

三、textField

textField是首先想到的,但是也是坑最多的,所以最后推荐他,textField是一个输入框,和textView的不同是如果禁止输入,不仅会影响UITextFieldDelegate代理函数的调用,还会影响内容的选择,所以不能禁止输入。

所以就要做这几件事来达到Label的效果,隐藏光标,输入的时候禁止输入框的弹出,要可以选择

所以就这么做了self.text1 = [[UITextField alloc] initWithFrame:CGRectMake(100, 400, 300, 40)];

[self.text1 setText:@"东东的博客"];

[self.text1 setTextColor:[UIColor grayColor]];

[ addSubview:self.text1];

[self.text1 setAdjustsFontSizeToFitWidth:YES];

self.=[UIColor clearColor];//隐藏输入光标

self. = self;

然后在代理方法点击输入框开始输入的时候,- (void)textFieldDidBeginEditing:(UITextField *)textField

{

NSLog(@"textFieldDidBeginEditing");

 =[[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];

//    [textField selectAll:textField];//并不是每次都调用,所以需要用performselector

[textField performSelector:@selector(selectAll:) withObject:textField afterDelay:];

}

inputView是响应text输入时的键盘,把它的frame设置成0从而达到隐藏的目的,因为没有直接隐藏或者既要响应点击还要禁止弹出键盘的方法,而选择使用performselector开其他线程来调用selectAll的方法是因为ios内部的实现会导致在textFieldDidBeginEditing中并没有每次都响应[textField selectAll:textField];这个函数。

如果没有隐藏掉输入弹出键盘,那么就是这样的

所以隐藏输入键盘之后才算达到目的。

效果图

四、Demo下载

五、Demo演示效果

六、参考文章版权属于:胡东东博客

自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!

☟☟如文章有用,可点击一次下方广告支持一下☟☟