参加了一个比赛有一道题是如标题一样,在UITextView上触摸找到该触摸点对应的文字,比赛也可以查资料,当时做的时候就是抱着玩玩的心态试试也没认真做,就没查就去吃饭去了,昨晚下班回去在思考这个问题发现还挺有水平的这道题不简单,自己就试着做了下,还是在Stack Overflow中找到的答案。http://stackoverflow.com/questions/19332283/detecting-taps-on-attributed-text-in-a-uitextview-in-ios

自己也试了试,还挺不错,原本以为ios基本不用学了,看来要学的还有好多好多,真是涨姿势。

下面是我测试的demo记录一下。

    _oxTextView=[[OXTouchTextView alloc]initWithFrame:CGRectMake(, , self.view.bounds.size.width, )];
    _oxTextView.text=@"猿圈是一家互联网技术人才服务平台,专注于技术人才的评测,用代码帮助企业快速识别技术人才:候选人接受线上测试挑战,使用机器自动判卷,编程数据采集,采用先进的技术能力识别算法,精确识别候选人的真实技术能力,形成全面的编程技能评估报告和分析矩阵,将结果反馈给用户和公司,大大节省了时间和精力。除此之外,猿圈自研的Android、iOS在线云端编译引擎,可以支持用户在云端(浏览器中)写代码,在世界处于领先地位。";
    [self.view addSubview:_oxTextView];
#import "OXTouchTextView.h"

@implementation OXTouchTextView

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
    }

    return self;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    //No.1
    //开始写代码,触摸操作开始时,获取当前触摸位置的字符所属的单词。并用UIAlertView显示出来(提示:触摸位置需向下调整10个点,以便与文本元素对齐)
    UITouch *touch =[touches anyObject];
    CGPoint touchPoint =[touch locationInView:self];

    NSInteger characterIndex = [self.layoutManager characterIndexForPoint:touchPoint inTextContainer:self.textContainer fractionOfDistanceBetweenInsertionPoints:NULL];
    if (characterIndex<self.text.length) {
        NSString *s=[self.text substringWithRange:NSMakeRange(characterIndex, )];
        NSLog(@"%@",s);
    }

    //end_code
    [super touchesBegan: touches withEvent: event];
}

@end

测试结果:

触摸UITextView找到该触摸点的文字的更多相关文章

  1. ios实例开发精品文章推荐(8.12)11个处理触摸事件和多点触摸的JS库

    11个处理触摸事件和多点触摸的JS库 触摸屏是现在所有智能手机的标配,还包括各种平板设备,而且很多桌面也慢慢在开始支持触摸操作.要开发支持触摸屏设备的Web应用,我们需要借助浏览器的触摸事件来实现. ...

  2. 手势识别官方教程(8)拦截触摸事件,得到触摸的属性如速度,距离等,控制view展开

    onInterceptTouchEvent可在onTouchEvent()前拦截触摸事件, ViewConfiguration得到触摸的属性如速度,距离等, TouchDelegate控制view展开 ...

  3. <WEB>平板_手机开发_13 个处理触摸事件和多点触摸的JS 库

    触摸屏是现在所有智能手机的标配,还包括各种平板设备,而且很多桌面也慢慢在开始支持触摸操作.要开发支持触摸屏设备的 Web 应用,我们需要借助浏览器的触摸事件来实线. 下图是各种触摸事件说明: 本文我们 ...

  4. js 触摸的Event--获取触摸位置

    继上一篇js原生拖拽之后,现在又来写一下移动端touch列表,获取触摸位置.pc端的event事件,鼠标的位置信息在上一篇,点此进入上一篇. touch有3个事件:touchstart,touchmo ...

  5. ubuntu14.04禁止触摸板和恢复触摸板

    1.使用xinput list查看与触摸板相关的id,以下是本机的输出,没搞清楚为什么是Mouse!!! jello@jello:~$ xinput list⎡ Virtual core pointe ...

  6. 说说iOS中的手势及触摸

    一.响应链 在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应. 首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResp ...

  7. 第29章 电容触摸屏—触摸画板—零死角玩转STM32-F429系列

    第29章     电容触摸屏—触摸画板 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  8. iOS 手势及触摸

    转自:http://justsee.iteye.com/blog/1885538 一.响应链 在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应. 首先,当发生事件响应时,必须知道由谁来 ...

  9. 多点触摸(MT)协议(翻译)

    参考: http://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt 转自:http://www.arm9home.ne ...

随机推荐

  1. TFS Training for Kunlun bank (http://www.klb.cn/) 微软研发流程(ALM)管理培训会议(昆仑银行) 2016.09.21

    银行一直是微软技术的伤心地,由于历史原因,微软技术和产品一直很难进入到银行业务的核心区域,但是微软今年来的进步不少,在开发工具和平台方面已经连续攻克了几个典型的金融企业,例如农业银行,中国人保等. 应 ...

  2. TSQL--按某字段列分组,在将各组中某列合并成一行

    鉴于群里很多同事在问这个问题,我简单写个Demo,希望对初学者有帮助! 无真相,无解说,不解释,直接上Code! --========================================= ...

  3. WPF画辐射图

    public void WriteLineCircle(double originX, double originY, double r, int lineCount,List<string&g ...

  4. 使用JQuery插件Jcrop进行图片截取

    Jcrop插件本身并不含有图片截取功能,它仅仅是在前端层面构建一套截取动画效果并产生4个坐标点,插件使用者将这4个坐标点传回至服务器接口上进行截取操作.其优点是具有较高的通用性.浏览器兼容性(IE6+ ...

  5. UCS2-little endian转码(utf16)

    public static void readFile(){ BufferedReader in = null; try { in = new BufferedReader(new InputStre ...

  6. C++引用和指针的区别

    一.引用和指针的定义 引用:它是给另一个变量取一个别名,不会再次分配空间(可以带来程序的优化) 指针:它是一个实体,需要分配空间 引用在定义的时候必须进行初始化,并且空间不能够改变.   指针在定义的 ...

  7. jzoj5864

    本來這道題該100的,沒想到考試沒想最短路,直接跑暴力了 實際上這道題有原題跳樓機 那道題在模x的意義下統計答案 現在,我們要統計n個數的答案 30pts為提高組原題 剩下70pts,可以記dis[i ...

  8. day57作业(包含data内容)

    day57作业 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=&quo ...

  9. ES六

    来自:http://es6.ruanyifeng.com/#docs/style 1,=> // bad console.log([1,2,3,4].map(function(x){return ...

  10. snmpv3-snmpd.conf解析

    1.先指定createUser语句,设置密码和传输密钥. createUser user1 createUser user2 MD5 user2password createUser user3 MD ...