参加了一个比赛有一道题是如标题一样,在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
测试结果: