HTCopyableLabel是UILabel的子类,使用户能够轻松地复制标签的文本。
请参阅HotelTonight技术博客上的相关的博客文章。有关如何在UILabel上实现复制的优秀解释,务必阅读UIMenuController在NSHipster上的介绍。
创建一个与创建UILabel
实例相同或 subclass HTCopyableLabel
的HTCopyableLabel
实例。您可以在Interface Builder中这样做。以编程方式,这看起来像这样
HTCopyableLabel *copyableLabel = [[HTCopyableLabel alloc] init];
[self.view addSubview:copyableLabel];
现在,长按标签会弹出一个带有"复制"选项的UIMenuController。按下"复制"会复制标签的text
。确保标签的父视图的userInteractionEnabled
设置为YES
。
实现HTCopyableLabelDelegate
协议可以让您更精细地控制UIMenuController
的位置,以及要复制的实际字符串。
UIMenuController
根据自己的frame定位自身,这个frame是由HTCopyableLabel
传给它的。默认情况下,HTCopyableLabel
将传递其自己的bounds。如果您想显式指定frame,请按照以下方式在您的HTCopyableLabelDelegate
中实现:
- (CGRect)copyMenuTargetRectInCopyableLabelCoordinates:(HTCopyableLabel *)copyableLabel
此外,UIMenuController
会根据您传递给它的frame的位置,智能地将其自身定位在上方、下方或旁边。如果希望覆盖此行为,应显式设置[HTCopyableLabel copyMenuArrowDirection]
。
如果您希望指定要复制到剪贴板的字符串,请在您的HTCopyableLabelDelegate
中实现以下方法:
- (NSString *)stringToCopyForCopyableLabel:(HTCopyableLabel *)copyableLabel
通过@jonsibs评论作者,并查看HotelTonight的技术博客:http://engineering.hoteltonight.com
此外,查看HotelTonight的其他iOS开源项目