用于混合文本,链接和可单击文本的组件

时间:2010-10-26 21:21:16

标签: iphone cocoa-touch uikit core-text

我有问题。需要一个用于混合文本,链接和可点击文本的组件。

在Facebook App中可以看到一个例子。 http://img193.imageshack.us/img193/1355/example1t.jpg

有人知道一个人能做到这一点。例如,UITextView可以检测文本中的链接,但不能插入可单击的文本。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我已经将CoreText用于此目的。

计算抽头偏移有点棘手,因为我一直忘记翻转坐标系,但我最终得到了它,这里简要介绍了如何做到这一点:

  1. 将您的文字设为NSMutableAttributedString(因为您必须在某个时候对其进行修改)。
  2. 扫描它以查找要添加链接的文本,插入两个属性:1)文本颜色,例如蓝色; 2)自定义链接属性(将其命名为任意名称,使其值为您想要的链接)
  3. drawRect:中渲染文字。你需要创建一个CTFramesetterRef和一个CTFrameRef(后者你要保留。还要注意创建一个框架集是一个昂贵的过程,只做一次(即,在drawRect :)如果可能的话。)
  4. 在您的触摸处理代码中,如前所述,您需要补偿不同的坐标系。从那里开始,假设您知道文本在哪里使用其坐标系,您可以确定在文本被渲染的文本中的位置,然后可以在触摸处理程序中截取,如果特定于CTRunRef的属性包含您的自定义链接属性。如果是这样,只需获取属性,并将其传递给任何内容 - 通常这是您要使用委托的地方。
  5. 这就是它的关键。