Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何为Twitter/action sheet设置社交共享例外?_Ios_Objective C_Twitter_Uiactionsheet_Social Framework - Fatal编程技术网

Ios 如何为Twitter/action sheet设置社交共享例外?

Ios 如何为Twitter/action sheet设置社交共享例外?,ios,objective-c,twitter,uiactionsheet,social-framework,Ios,Objective C,Twitter,Uiactionsheet,Social Framework,我正在使用以下代码调用我的应用程序中的操作表共享: - (IBAction)sendPost:(id)sender { NSArray *activityItems = nil; UIImage *appIcon = [UIImage imageNamed:@"appIcon.png"]; NSString *postText = [[NSString alloc] initWithFormat:@"LETS ASSUME THIS STRING IS LONGER TH

我正在使用以下代码调用我的应用程序中的操作表共享:

- (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显式设置字符串的方法,一旦您来到这里:

编辑:我不明白为什么有人会否决这个问题,我不是问如何做出if/else声明或如何编程。这是一个真正的问题,需要一个真正的答案。

更新:我需要解决这个问题,因为这是当用户试图在我的应用程序中通过twitter共享时我得到的结果:

一个红色/负数字符指示器和一个非活动的post按钮,因此除非该字符计数降至0或更少,否则它将不允许该帖子进入twitter。

TL;DR使用到特殊情况有效负载取决于用户选择的内容

请尝试以下方法:

- (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
-(iAction)sendPost:(id)发送者
{
UIImage*appIcon=[UIImage ImageName:@“appIcon.png”];
NSString*postText=[[NSString alloc]initWithFormat:@“假设此字符串长度超过TWITTER禁止的140个字符,但仍可通过FACEBOOK、电子邮件、文本共享”];
TextItemSource*itemSource=[[TextItemSource alloc]initWithString:postText预览图像:appIcon];
UIActivityViewController*activityController=[[UIActivityViewController alloc]initWithActivityItems:@[itemSource]应用程序活动:nil];
[self-presentViewController:activityController动画:是完成:无];
}
//------TextItemSource.h
@接口TextItemSource:NSObject
-(id)initWithString:(NSString*)字符串预览图像:(UIImage*)预览图像;
@结束
//------TextItemSource.m
@实现TextItemSource
{
NSString*\u字符串;
UIImage*\u预览图像;
}
-(id)initWithString:(NSString*)字符串预览图像:(UIImage*)预览图像
{
self=[super init];
如果(自我){
_字符串=[string copy];
_预览图像=预览图像;
}
回归自我;
}
-(id)activityViewControllerPlaceholderItem:(UIActivityViewController*)activityViewController
{
返回字符串;
}
-(id)activityViewController:(UIActivityViewController*)activityViewController itemForActivityType:(NSString*)activityType
{
NSString*字符串=_字符串;
if([activityType isEqual:UIActivityTypePostToWitter]){
#布拉格玛·马克·托多:做更聪明的事:)
字符串=[\u subject substringToIndex:140];
}
返回字符串;
}
-(UIImage*)activityViewController:(UIActivityViewController*)activityViewController缩略图ImageforActivityType:(NSString*)activityType建议大小:(CGSize)大小
{
//可能需要缩放图像以适应建议的大小
返回预览图像;
}
@结束

当你在推特上分享超过140个字符的文字时,它会做什么?@LoïcFaure Lacroix我已经更新了这篇文章,回答了你的问题