UIActivityViewController在共享到Messages时删除冗余空间

时间:2015-09-13 19:12:55

标签: ios swift uiactivityviewcontroller

我的项目中有类似的代码,我在共享项之间获得了多余的空间。是否可以删除它?

let text = "Some text\n"
let link = NSURL(string: "http://stackoverflow.com/")!

let items = [text, link]
let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)

self.presentViewController(activityVC, animated: true, completion: nil)

enter image description here

4 个答案:

答案 0 :(得分:7)

根据下面提到的代码使用NSString而不是NSURL:

NSString *text = @"Some Text";
NSString *URL = @"\nhttp://www.apple.com";
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:@[text, URL] applicationActivities:nil];

[self presentViewController:controller animated:YES completion:nil];

------------------- Swift Code(根据问题)-------------

let text = "Some text"
let link = "\nhttp://stackoverflow.com/"

let items = [text, link]
let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)

self.presentViewController(activityVC, animated: true, completion: nil)

您可以看到附加的屏幕截图。发布/发送消息后,它仍会显示为链接。

如果网址不是活动项数组中的第一个对象,则默认情况下URL会添加空格。

希望这有帮助。

enter image description here

答案 1 :(得分:3)

更新:这是一个复杂的解决方案。似乎只有“消息”不起作用,所以我使用两个活动对象来解决。

您应该创建两个符合UIActivityItemSource协议的类。我不熟悉Swift所以它们是用Objective-C实现的,我相信你可以理解。

1 ActivityObject class

@interface ActivityObject : NSObject

@end

@implementation ActivityObject

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    return @"some Text";
}

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
    if ([activityType isEqualToString:@"com.apple.UIKit.activity.Message"]) {
        return @"Some text\nhttp://stackoverflow.com/";
    } else {
        return @"Some text";
    }
}
@end

2 ActivityObjectURL课程

@interface ActivityObjectURL : NSObject

@end

@implementation ActivityObjectURL

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    return @"";
}

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
    if ([activityType isEqualToString:@"com.apple.UIKit.activity.Message"]) {
        return @"";
    } else {
        return [NSURL URLWithString:@"http://stackoverflow.com"];
    }
}

@end

然后像这样使用它们。

ActivityObject *o = [[ActivityObject alloc] init];
ActivityObjectURL *ol = [[ActivityObjectURL alloc] init];
UIActivityViewController *avc = [[UIActivityViewController alloc] initWithActivityItems:@[o, ol] applicationActivities:nil];
[self presentViewController:avc animated:YES completion:nil];

@ dsiddhpura的解决方案将在Mail app中添加一个奇怪的换行符。

enter image description here enter image description here

答案 2 :(得分:2)

我认为其他地方一定有问题。 我尝试使用以下代码块重现您的案例

    let text = "Some text"
    let text2 = "ABC text"
    let text3 = "DEF text"
    let link = NSURL(string: "http://stackoverflow.com/")!

    let items = [text, text2, text3, link]
    let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)

    self.presentViewController(activityVC, animated: true, completion: nil)
  1. 选择“复制”然后将其粘贴,我得到: Some text ABC text DEF text http://stackoverflow.com/

  2. 当选择通过消息分享时,我得到了 Some text ABC text DEF text http://stackoverflow.com/

  3. 这是正确的(默认)行为。顺便说一句,不可能改变这种默认行为。

    如果您仍想这样做,请更改@KudoCC建议的文字格式或创建自定义UIActivity是唯一的选择。

    祝你好运

答案 3 :(得分:0)

试试吧。

let text = "Some text"
let link = NSURL(string: "\nhttp://stackoverflow.com/")!
let items = [text, link]
let activityVC = UIActivityViewController(activityItems: items, applicationActivities: nil)
self.presentViewController(activityVC, animated: true, completion: nil)