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

方案思路

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

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

textField

一、textView加手势使用

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

[self.textView setText:@"Damon胡东东"];

self.textView.delegate = self;

[self.textView setTextColor:[UIColor redColor]];

[self.view addSubview:self.textView];

//禁止输入

self.textView.editable =NO;

//增加点击手势

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

[self.textView addGestureRecognizer:tap2];

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

NSLog(@"textView的手势");

[self.textView selectAll:self];

}

效果图

二、Label加手势

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

[self.label setText:@"哈哈哈"];

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

[self.view addSubview:self.label];

//增加手势

[self.label setUserInteractionEnabled:YES];

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

[self.label 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:self.label.text];

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]];

[self.view addSubview:self.text1];

[self.text1 setAdjustsFontSizeToFitWidth:YES];

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

self.text1.delegate = self;

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

{

NSLog(@"textFieldDidBeginEditing");

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

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

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

}

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

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

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

效果图

四、Demo下载

五、Demo演示效果

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

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

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

iphone复制不能全选_IOS默认全选复制的三种方案相关推荐

  1. 网页内容复制粘贴(三种方案 兼容多种浏览器)

    tags: js ctrl+c 网页内容复制粘贴(三种方案 兼容多种浏览器) 对网页上的内容实现复制粘贴的功能 痛点:需要支持多种不同的浏览器 主要有IE,Firefox IE浏览器下的解决方案: w ...

  2. vue设置多选框默认勾选_Vue实现全选和反选即Vue复选框增加全选功能

    导语:Vue中单选下拉框开发起来非常简单,直接select包裹一个带v-for的option即可 但是当我们想做个带多选的下拉框该怎么办呢?最简方法是什么?比如下面这个图: 如果网上搜的话,搜的是一堆 ...

  3. vue设置多选框默认勾选_vue中复选框怎么默认全选,至少选择4个才可以点击下一步...

    [1]项目中有这样的需求,要怎么解决呢...默认复选框是全选状态,也可以取消某一个状态,至少选择4个选项才可以点击下一步.这个要怎么实现啊 html: 原料进厂 模块组装 成品 质检 仓储 物流 销售 ...

  4. python壁纸超清全面屏_iOS 关于全面屏适配的方案及UI在不同尺寸下适配方案

    iOS 关于全面屏适配的方案及UI在不同尺寸下适配方案 前言 全面屏刚出时,网上有说反人类.但过去这么久了,趋于技术的进步或看久了,大家也都慢慢习惯了(只是笔者还是买不起全面屏).官方适配中文版文档也 ...

  5. vue设置多选框默认勾选_Angular/Vue多复选框勾选问题

    此页面效果以Angular实现,Vue也可按照其大致流程实现,其核心本质没有改变. 功能效果为:页面初始化效果为要有所有角色的复选框,要求初始化默认勾选的角色要显示勾选,之后,能按照最终勾选的状态提交 ...

  6. 4个mos管驱动的全桥电路原理_逆变电源中的三种保护电路讲解

    电路中经常会通过较大的电流,这就造成了电路中存在很多不确定的因素.为了避免这些因素对电路或者重要器件的损伤,保护电路应运而生.保护电路在逆变电源这种经常需要进行电流转换的器件中显得尤为重要.本篇文章就 ...

  7. VS无法打开源文件,三种方案比较全,用第三种方案最终解决了。

    VS2019无法打开源文件,注意该头文件是自己写的头文件,也适用于从别处下载来的头文件出现同样的问题.(方法三不局限于VS2019,其他版本也适合) 百度方法一: 参见https://blog.csd ...

  8. ios 检测是否联网_iOS 判断当前网络状态的三种方法

    在项目中,为了好的用户体验,有些场景必须线判断网络状态,然后才能决定改干嘛.比如视频播放,需要线判断是Wifi还是4G,Wifi直接播放,4G先提示用户.获取网络状态的方法大概有三种: 1. Reac ...

  9. iPhone开发-- 崩溃之 Collection was mutated while being enumerated.的三种解决办法

    崩溃提示 崩溃提示:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection &l ...

最新文章

  1. 关于C#使用Shockwaveflash控件设计器不显示问题的解决方案
  2. java utils
  3. 李连杰年度巨作霍元甲主题曲:周杰伦唱
  4. 面向对象方法的优势简化软件开发的过程_软件开发技巧的途径
  5. 机器学习实战6-sklearn训练决策树实现分类和回归
  6. sql活动监视器 死锁_监视SQL Server死锁–简单方法
  7. 揭秘微信朋友圈这种信息推流背后的系统设计
  8. Halcon图像预处理与形态学(图像的点运算)
  9. Linux系统(一)文件和目录理解
  10. HTML5块元素标签的使用
  11. 用 CSS 隐藏页面元素
  12. 《自己动手写操作系统》之 10分钟完成最小的操作系统
  13. Android 特效直播实现原理解析
  14. OSChina 周五乱弹 ——程序员看火影忍者被女同事鄙视了
  15. Shader实现透明反射效果应用地板
  16. 八六、Linux 服务器+Nginx服务简介
  17. disallow: /api.php,dz论坛如何禁止搜索引擎抓取任何内容?
  18. 如何计算阻力系数与升力系数【翻译】
  19. 2020python二级考试时间_2020年计算机二级考试时间及考试科目
  20. 水面倒影风格的LOGO在线做

热门文章

  1. 常见的安全问题及其相应解决方法
  2. Mysql的distinct、order by和group by冲突报错
  3. ACIS,Parasolid,OPENCASCADECAD几何内核对比
  4. 2021-08-11校网比赛A题
  5. RocksCluster上Fluka编译环境gcc/gfortran配置
  6. token是什么?如何获取token
  7. 技术合伙人如何避免被踢出局
  8. 重复网页,网址已提交但未被选为规范网址—google
  9. 自动驾驶 4-3 二维动态建模Dynamic Modeling in 2D
  10. cakephp: 和Smarty集成