如何为 Twitter / 操作表制作社交分享例外?

8
我将使用以下代码在我的应用中调用操作表共享功能:
```Swift 我正在使用以下代码调用动作表共享我的应用程序: ```
- (IBAction)sendPost:(id)sender
{
    NSArray *activityItems = nil;
    UIImage *appIcon = [UIImage imageNamed:@"appIcon.png"];
    NSString *postText = [[NSString alloc] initWithFormat:@"LETS ASSUME THIS STRING IS LONGER THAN 140 CHARACTERS THAT TWITTER PROHIBITS BUT CAN STILL BE SHARED VIA FACEBOOK, EMAIL, TEXT"];
    activityItems = @[postText,appIcon];
    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
    [self presentViewController:activityController animated:YES completion:nil];
}

问题是这样的:postText 的长度超过了 140 个字符,因此无法通过 Twitter 进行分享,字符计数将为 -x(你需要减少的字符数才能通过 Twitter 进行分享),我的问题是:我该如何制定一个例外情况,使得当选择 Twitter 进行分享时,会使用另一条消息 shortPostText

一旦发送sendPost 动作后,我看不到明确设置字符串供 Twitter 使用的方法,一旦在此处:

enter image description here

更新:我不明白为什么有人会对这个问题进行负投票,我并没有问如何编写if/else语句或如何编程。这是一个真正的问题,需要一个真正的答案。

更新:我需要一个解决办法,因为这是当用户尝试在我的应用中通过 Twitter 进行分享时所看到的内容:

enter image description here

红色/负数字符指示器和非活动状态的发布按钮,因此除非字符计数降至 0 或以下,否则它不允许帖子发布到 Twitter。


当你在Twitter上分享超过140个字符的文本时,会发生什么? - Loïc Faure-Lacroix
@LoïcFaure-Lacroix,我已经更新了帖子并回答了你的问题。 - vzm
1个回答

1

TL;DR 使用 UIActivityItemSource 根据用户选择特殊处理有效负载。

请尝试以下方法:

- (IBAction)sendPost:(id)sender
{
    UIImage *appIcon = [UIImage imageNamed:@"appIcon.png"];
    NSString *postText = [[NSString alloc] initWithFormat:@"LETS ASSUME THIS STRING IS LONGER THAN 140 CHARACTERS THAT TWITTER PROHIBITS BUT CAN STILL BE SHARED VIA FACEBOOK, EMAIL, TEXT"];
    TextItemSource *itemSource = [[TextItemSource alloc] initWithString:postText previewImage:appIcon];
    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:@[itemSource] applicationActivities:nil];
    [self presentViewController:activityController animated:YES completion:nil];
}

// ------- TextItemSource.h
@interface TextItemSource : NSObject <UIActivityItemSource>
- (id)initWithString:(NSString *)string previewImage:(UIImage *)previewImage;
@end

// ------- TextItemSource.m
@implementation TextItemSource
{
    NSString *_string;
    UIImage *_previewImage;
}

- (id)initWithString:(NSString *)string previewImage:(UIImage *)previewImage
{
    self = [super init];
    if (self) {
        _string = [string copy];
        _previewImage = previewImage;
    }
    return self;
}

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

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
{
    NSString *string = _string;
    if ([activityType isEqual:UIActivityTypePostToTwitter]) {
#pragma mark TODO: do smarter thing :)
        string = [_subject substringToIndex:140];
    }
    return string;
}

- (UIImage *)activityViewController:(UIActivityViewController *)activityViewController thumbnailImageForActivityType:(NSString *)activityType suggestedSize:(CGSize)size
{
    // might want to scale image to fit suggestedSize
    return _previewImage;
}
@end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接