Apple如何在ABPeoplePickerNavigationController中为联系人姓名使用粗体和普通字体

时间:2011-03-12 03:54:01

标签: objective-c ios core-data uilabel abaddressbook

简短而甜蜜:我的最终目标是,使用一个带有两个单词的UILabel,以粗体显示一个单词,以正常字体显示另一个单词。我发现的所有解决方案都在我头上! :(

更多细节:
前一天我asked a question没有给出我希望得到的答案,现在看来我需要使用UITableViewController和来自ABAddressBook的内容重新创建ABPeoplePickerNavigationController。如果您阅读我之前的问题并且可以提出更好的解决方案,真棒!如果不是......

当我重新创建PeoplePicker时,我真的想要完全模仿Apple的默认实现,尤其是它们如何在同一标签中使用粗体和普通字体作为联系人名称。

现在,我知道在SO和其他地方已经问了很多这个问题。许多人都有这种需求,解决方案各不相同:

  1. use a webview
  2. use the UIStringDrawing methods
  3. subclass UILabeloverride drawrect
  4. 深入研究CoreText
  5. 使用ThreeTwenty库
  6. 使用两个uilabels,创建一个粗体,一个像平常一样,并将它们放在一起(需要我再子类UITableViewCell才能放置两个标签
  7. 解决方案#2,#3和#4似乎是最强大的,根据我在其他问题中所读到的,这就是Apple实际上是如何做到的。不幸的是,这些技术目前还有点过头,而且我很难跟踪我在网上找到的有限数量的细节。我还没有做过任何关于明确绘图的事情。

    有人自己实现了这个吗?您可以提供哪些代码示例来帮助我掌握这些更高级的技术?

    谢谢!

3 个答案:

答案 0 :(得分:2)

有第6种解决方案。使用2个UILabels。使用粗体文本以粗体创建一个,并要求其大小适合。然后,一旦你完成了它,你就可以创建第二个并将它放在第一个旁边。

答案 1 :(得分:0)

你应该阅读“适用于iOS的表视图编程指南”,有一个标题为“Subclassing UITableViewCell”的部分,它完全符合你的要求(即绘制不同属性的字符串)。

答案 2 :(得分:0)

所以,为了解决这个问题,我最终找到了第7个选项。 :)

我和OHAttributedLabel一起去了。我仍然无法绕过UIStringDrawing方法或覆盖子类UILabel中的drawRect;我认为那些将是最干净的解决方案。但是,OHAttributedLabel看起来很结实,超轻量级,并且完全符合我的需要。

祝你好运!如果有人发现更多解决方案,或者想要更详细地解释UIStringDrawing或drawRect,请随时发布!

<强>更新

我一直在使用Matt Thompson的TTTAttributedLabel并且对它非常满意。 https://github.com/mattt/TTTAttributedLabel