如何将自定义视图添加到属性字符串或文本视图?

时间:2017-01-09 16:16:34

标签: ios swift uitextview nsattributedstring nstextattachment

我正在尝试在属性字符串中获取要在textView上显示的自定义视图。我可以使用NSTextAttachment添加图像,但这不是我想要的。我有一个自定义视图,支持我希望在文本之间显示的Gif和动画PNG。

示例:

文本文本文本[customView]文本[customView]文本。 < - 在文本视图中,最好是在属性字符串

我希望得到一些关于我应该专门搜索的指导。到目前为止,我已经看到了相关的问题......

2 个答案:

答案 0 :(得分:0)

首先,使用NSAttributedStringNSMutableAttributedString在子视图中显示RichText(例如UITextView / UILabel)

然后,使用NSTextAttachment替换文字中的图片脚本。

NSString *egText = @"hello [this_is_an_img_script]";

NSMutableAttributedString * destStr = [[NSMutableAttributedString alloc] initWithString:egText];

NSTextAttachment *attachment = [[NSTextAttachment alloc] initWithData:nil ofType:nil];

attachment.image = [UIImage imageNamed:[this_is_an_img_script]];

NSAttributedString *textAttachmentString = [NSAttributedString attributedStringWithAttachment:attachment]; //make your image to an attributedString

[destStr replaceCharactersInRange:range withAttributedString:textAttachmentString];

at last: [YourLabel(or YourTextView) setAttributedString:destStr];

BTW:如果您使用YYkit作为RichText,则无法使用YYAttachMentString替换NSAttachMentString,这些是不同的事情,UITextView(UILabel)无法加载YYAttachMentString {1}}。 我正在寻找使用UITextView来展示我的GIF的方法(因为YYKit无法加载并使用网址预览netimage,YYKit始终显示为空netImage function calculateTotal() { var totalCm = 0; $("input[name='cm']").each(function() { totalCm += $(this).val() ? Number($(this).val()) : 0; }); $("input[name='TOTAL CUBIC METER']").val(totalCm); // -------------------- var totalRate = 0; $("input[name='rate']").each(function() { totalRate += $(this).val() ? Number($(this).val()) : 0; }); $("input[name='TOTAL RATE']").val(totalRate); // -------------------- $("tr").each(function() { if ($(this).children("td").length) { $($($(this).children("td")[2]).children("input")[0]).val( (($($($(this).children("td")[1]).children("input")[0]).val()) ? Number($($($(this).children("td")[1]).children("input")[0]).val()) : 0) + (($($($(this).children("td")[0]).children("input")[0]).val()) ? Number($($($(this).children("td")[0]).children("input")[0]).val()) : 0) ) } }); // -------------------- var totalTaka = 0; $("input[name='tk']").each(function() { totalTaka += $(this).val() ? Number($(this).val()) : 0; }); $("input[name='TOTAL TAKA']").val(totalTaka); // -------------------- } $("input").on('change', function() { calculateTotal(); }); 1}},cripes!)

答案 1 :(得分:-3)

将文本与图像可靠地混合是一项复杂的任务。多年前,随着网络浏览器的发明,它得到了解决。因此,您可以使用UIWebView来完成此任务。

或者,如果您有文本和图像的静态位置,则只能在主视图中使用几个控件。 F.E.一个低于另一个。

在任何情况下,您都应该使用第三方控件来显示您的GIF,因为UIImageView不支持它。

Here is one