【发布时间】:2014-12-27 06:35:01
【问题描述】:
有很多关于 SO 的答案向开发人员展示了如何从 HTML 内容制作字符串或将 URL 放入字符串中,但我的问题是如何制作 HTML 字符串。
我正在尝试创建一个将以 HTML 格式返回或至少不显示 URL 的字符串。
例如,网络开发人员会这样做来隐藏 URL:
<a href="http://google.com">Visit Us at Google.com!</a>
这样做我可以轻松地将其转换为字符串:
NSString *urlLink = @"www.google.com";
NSString *string = [NSString stringWithFormat:@"Visit Us at %@", urlLink];
但这并不能用我选择的超链接词替换链接。
我知道设备会根据您的显示方式决定它是否为超链接。即文本字段、文本视图,或者您可以强制打开它等。
我想做的是:
#define APPSTORELINK @"www.appstorelink.com"
@implementation Config
+(NSString *)appstorelink {
return APPSTORELINK;
}
+(NSString *)mmsmetadata {
NSString *string = [NSString stringWithFormat:@"I shared this publication with the <a href=\"http://%@\">[Name of my iPhone App] iPhone App</a>", APPSTORELINK];
return string;
}
所以我可以轻松地在此处或应用范围内调用它:
NSArray *shareItems;
UIImage *snapshot = [self imageFromView:self.view];
shareItems = @[[Config mmsmetadata], snapshot];
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:shareItems applicationActivities:nil];
activityController.excludedActivityTypes = @[UIActivityTypePostToFlickr, UIActivityTypeAssignToContact, UIActivityTypeMail, UIActivityTypePostToVimeo];
[activityController setCompletionWithItemsHandler:(UIActivityViewControllerCompletionWithItemsHandler)^(NSString *string, BOOL completed) {
简而言之,我怎样才能使字符串 HTML 格式开箱即用?我主要关心的是我想隐藏 URL 并将其替换为 HTML 标记,或者如果您有更好的解决方案。在 SO 上找不到任何内容。
有什么想法吗?这点我可能想多了。我敢肯定有更简单的方法
编辑
甚至在发布之前我就已经知道 NSAttributedString 并且这是我尝试的第一件事。但是,问题不在于设置属性,这是简单的部分,定义我的问题的部分是如何设置它,以便在 UIActivityViewController 中使用活动时将 DISPLAY 作为属性
我是这样设置的,但结果和上面一样,所以我认为使用 HTML 标签会更容易:
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"I shared this publication with the Army Pubs iPhone App!"];
NSRange selectedRange = NSMakeRange(0, [string length]);
NSURL *linkURL = [NSURL URLWithString:APPSTORELINK];
[string beginEditing];
[string addAttribute:NSLinkAttributeName
value:linkURL
range:selectedRange];
[string addAttribute:NSForegroundColorAttributeName
value:[UIColor blueColor]
range:selectedRange];
[string addAttribute:NSUnderlineStyleAttributeName
value:[NSNumber numberWithInt:NSUnderlineStyleSingle]
range:selectedRange];
[string endEditing];
return string;
但是,它仍然在 Message 或 Mail 编写器中显示为纯文本。所以想想 MFMailComposeViewControllerDelegate 如何设置 isHTML。如果它设置为 yes,它会去除所有 HTML 标记并将文本显示为超链接。例如:
MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
mc.mailComposeDelegate = self;
[mc setSubject:emailTitle];
[mc setMessageBody:messageBody isHTML:YES];
我想模拟从 UIActivityViewController 中调用活动时的情况
这是当前的输出,即使我使用我首先尝试的属性字符串,它只是通过剥离 HTML 标记显示为纯文本,但不会使其成为链接
【问题讨论】:
-
你有什么解决办法吗?我也面临这个问题。
-
我还没有@Ada,我什至一年都没有看过文档。我猜现在 Apple 在新 iMessage 和最新操作系统中引入丰富链接的方式是可能的。稍后我得看看