【问题标题】:Populate a hyperlink attributed string for UIActivityViewController activities为 UIActivityViewController 活动填充超链接属性字符串
【发布时间】: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 和最新操作系统中引入丰富链接的方式是可能的。稍后我得看看

标签: html ios nsstring


【解决方案1】:

查看attributed strings中的链接选项。

link 属性指定传递给 NSTextView 方法的任意对象 clickedOnLink:atIndex: 当用户在文本范围内点击时 与 NSLinkAttributeName 属性相关联。文本视图的 委托对象可以实现 textView:clickedOnLink:atIndex: 或 textView:clickedOnLink: 处理链接对象。否则,该 默认实现检查链接对象是否为 NSURL 对象,如果是,则在 URL 的默认应用程序中打开它。

【讨论】:

  • 感谢您的建议,这是我尝试的第一件事,但是,我的问题标题不妥,所以我进行了更改以反映我的目标。我认为它是在询​​问如何制作字符串的可点击部分,这很简单,我只是不知道在使用 MFMessageComposeViewController 或 UIActivityViewController sharedItems 时如何让它以这种方式显示。我真的不想只添加网址,但我想我可能不得不
猜你喜欢
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
相关资源
最近更新 更多