填充UIActivityViewController活动的超链接属性字符串

时间:2014-12-27 06:35:01

标签: html ios nsstring

SO上有很多答案显示开发人员如何从HTML内容创建字符串或将URL放在字符串中,但我的问题是如何制作HTML字符串。

我正在尝试创建一个以HTML格式返回的字符串,或者至少不显示该URL。

因此,例如Web开发人员会这样做来隐藏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;

但是,它仍然在消息或邮件编辑器中显示为纯文本。所以想想MFMailComposeViewControllerDelegate是如何设置isHTML的。如果设置为yes,则会删除所有HTML标记并将文本显示为超链接。例如:

 MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
 mc.mailComposeDelegate = self;
 [mc setSubject:emailTitle];
 [mc setMessageBody:messageBody isHTML:YES];

我想模仿在UIActivityViewController中调用活动时

这是输出当前即使我使用属性字符串我首先尝试它只是通过剥离HTML标记显示为纯文本但不会使其成为链接

message app

1 个答案:

答案 0 :(得分:0)

请参阅attributed strings中的链接选项。

  

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