类似于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日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!
☟☟如文章有用,可点击一次下方广告支持一下☟☟