Twitter iOS6发布的“取消”按钮问题

14

我正在修改我的应用以适用于iOS6和iPhone,但是当我使用新的Social框架从Twitter发布内容时,我似乎无法弄清楚为什么需要按两次“取消”才能关闭。还有其他人遇到这个问题或者有解决方法吗?这里是按钮的代码。

- (IBAction)twitterPost:(id)sender
{
if([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
    mySLComposerSheet = [[SLComposeViewController alloc] init];
    mySLComposerSheet = [SLComposeViewController   composeViewControllerForServiceType:SLServiceTypeTwitter];
    [mySLComposerSheet setInitialText:[NSString stringWithFormat:@"This is my tweet, hello!",mySLComposerSheet.serviceType]];
    [self presentViewController:mySLComposerSheet animated:YES completion:nil];
}
[mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) {
    NSLog(@"dfsdf");
    switch (result) {
        case SLComposeViewControllerResultCancelled:
            break;
        case SLComposeViewControllerResultDone:
            break;
        default:
            break;
    }
}];


}

2
你尝试在呈现视图控制器之前设置completionHandler了吗? - Alejandro Benito-Santos
干得好,谢谢Alex。 - Nathan Cleary
不错,我已经将评论发布为答案(请参见下文)。干杯! - Alejandro Benito-Santos
5个回答

18
如果您正在使用mySLComposerSheet,这个功能非常棒...
[mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) {
[mySLComposerSheet dismissViewControllerAnimated:YES completion:nil];

6
请记住,对于自动关闭的Facebook SLComposeViewController,不要执行此操作!rdar:12440972 - Steven Kramer
@Steven,你能否检查一下苹果公司是否已经在今天修复了这个问题?最近他们修复了很多 rdar。 - Klaas
我一直在尝试验证,但由于另一个问题,到目前为止还没有成功。 - Steven Kramer
2
由于此代码块内发生,因此您无法使用 mySLComposerSheet。请改用 self 代替 mySLComposerSheet。顺便说一句,谢谢提示 :) - Prasad De Zoysa
回答@Klaas,截至2013年10月,使用iOS 7 SDK的Twitter仍存在此问题。 - CodeBrew
显示剩余3条评论

9

我的经验是,SLComposeViewController 中的 twitter 和 weibo controllers 需要手动关闭,而 Facebook controller 则表现得更好。

如果我不自己使用 dismissViewControllerAnimated 关闭控制器,点击“发送”按钮会发送推文或微博帖子,但我会发现似乎在我的视图上出现了一个看不见的视图。因此,我不能再与我的应用程序交互了。

我不知道为什么我的应用程序会出现这种情况...有趣的是,取消操作的 completionHandler 只会被调用一次。第二次点击才会关闭视图控制器。

+ (void) shareText:(NSString*)text image:(UIImage*)image social:(NSString*)service url:(NSString*)url
{
    SLComposeViewController*    controller = [SLComposeViewController composeViewControllerForServiceType:service];

    [controller setInitialText:text];
    [controller addImage:image];
    [controller addURL:[NSURL URLWithString:url]];

    controller.completionHandler = ^(SLComposeViewControllerResult result) {
        if( SLComposeViewControllerResultDone == result )
        {
            NSLog(@"rewards for share: %@!", service );
        }
        if( ![SLServiceTypeFacebook isEqualToString:service] )  // facebook behaves
            [[CBLAppDelegate instance].activeViewController dismissViewControllerAnimated:true completion:nil];
    };
    [[CBLAppDelegate instance].activeViewController presentViewController:controller animated:true completion:nil];
}

完全一样。您向苹果发送了一些错误报告吗?或者您有更好的解决方法吗? - onevcat

7
发现问题所在。只有在向TWTweetComposeViewController添加完成处理程序时才会发生。如果添加了,请确保调用:
[self dismissModalViewControllerAnimated:YES];

请使用[self dismissViewControllerAnimated:YES completion:nil];代替[self dismissModalViewControllerAnimated:YES]; - Prasad De Zoysa

3
尝试这个伙计。
   [mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) {

        switch (result) {
            case SLComposeViewControllerResultCancelled:
                [self performSelector:@selector(showalert)];
                [mySLComposerSheet dismissViewControllerAnimated:YES completion:nil];
                break;
            case SLComposeViewControllerResultDone:
                [self performSelector:@selector(showalert1)];
                [mySLComposerSheet dismissViewControllerAnimated:YES completion:nil];
                break;

            default:
                break;


        }
    }];

如果您使用Twitter,则需要使用dissmissViewControllerAnimated,但如果您使用Facebook,则不需要 - 在那里它可以正常工作! - Sam

1

将评论发布为答案:

在呈现视图控制器之前,您尝试设置completionHandler了吗?


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