ios – 如何为Twitter /行动表制作社交分享例外?

我使用以下代码在我的应用程序中调用操作表共享:
- (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分享的红色字符数),我的问题是:如何我可以做一个例外,以便不同的消息说shortPostText将是选择twitter进行共享时使用的那个吗?

一旦你发送了sendPost动作,我就看不到为twitter明确设置字符串的方法了:

编辑:我不明白为什么有人会对这个问题进行投票,我不会问如何制作if / else语句或如何编程.这是一个真正的问题,需要一个真正的答案.

更新:我需要解决这个问题,因为当用户尝试通过我的应用程序中的Twitter分享时,这是我得到的:

红色/负号字符指示符和非活动帖子按钮,因此除非字符数减少到0或更少,否则不允许帖子转到twitter.

解决方法

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,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

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...