如何根据手指按压位置从UILabel中提取子串?

时间:2013-04-08 13:20:36

标签: ios objective-c cocoa-touch uilabel

我有一个包含文字的UILabel。

一旦我按下这个UILabel,我想从我的手指按下的位置提取一个单词。

我在互联网上搜索了一下,但对如何实现它没有任何线索。

这里有人知道怎么做吗?

提前致谢。

3 个答案:

答案 0 :(得分:2)

  

一旦我按下这个UILabel,我想从中提取一个单词   我的手指按下的位置。

对于UILabel而言,这并不容易。 UILabel是一种在屏幕上放置静态文本的简单方法;它不提供可以让您确定单个单词框架的功能。

你可能最好为此创建自己的视图。你需要深入研究核心文本来布局和绘制文本。核心文本比使用简单的UILabel要复杂得多,但它为您提供了确定每个单词在屏幕上绘制位置所需的信息和控制。您的视图可以使用该信息将触摸映射到单词。

答案 1 :(得分:0)

最简单的方法是让每个单独的单词成为一个单独的标签,这样你所要做的就是在标签上添加一个UITapGestureRecognizer,并在触摸时从中抓取文本。

但是,如果你想用一个标签来做,这里有一些可行的伪代码:

  1. 将UITapGestureRecognizer添加到标签中。触摸后,获取触摸位置。
  2. 使用NSString的- (CGSize)sizeWithFont:(UIFont *)font方法获取标签整个字符串的大小(让我们称之为stringSize)。
  3. stringSize.width与标签的宽度进行比较,以确定文本的开始位置(如果标签位于中心或右侧,则可能不在标签的起始X坐标处)。即。 startingX = label.width - stringSize.width / 2
  4. 现在使用NSString的- (NSArray *)componentsSeparatedByString:(NSString *)separator方法将标签中的字符串分隔为每个单词,空格字符作为分隔符。让我们将它存储到一个名为wordsAr的数组中。
  5. 创建变量currentXPos,并将其初始化为startingX
  6. 现在创建一个for循环,遍历wordsAr中的每个单词,使用- (CGSize)sizeWithFont:(UIFont *)font计算该单词的大小,并将其添加到currentXPos。当currentXPos> =您的触摸值的x位置时,您已找到您点按的单词。

答案 2 :(得分:0)

您可以在以下链接中使用TTTAttributedLabel:https://github.com/mattt/TTTAttributedLabel

将您的可点击文本定义为标签的链接,然后您将得到您所需要的。